SpringBoot整合cas客户端

最近一个项目要接入一个统一登录平台,对方使用的是cas服务端,我们的项目需要继承cas客户端。我对项目进行了调整,集成cas客户端,具体的步骤如下:

首先要在pom.xml中引入cas的依赖,如下:



    net.unicon.cas
    cas-client-autoconfig-support
    2.2.0-GA
    
        
            org.jasig.cas.client
            cas-client-core
        
    



    org.jasig.cas.client
    cas-client-core
     3.5.0

注:这里要特别提醒下,网上有些帖子写的xml的配置,可能只需要第二个dependency就可以了,但是对于springboot来说,可能会有一定的问题,我这边是报了一个json的错误,最后找了半天才发现是这块的问题。

然后再对application.properties做如下的配置(基本有注释):

#cas 前缀
cas.server-url-prefix=http://192.168.2.101:9999/cas
#cas cas登录
cas.server-login-url=http://192.168.2.101:9999/cas/login
#回调
cas.client-host-url=http://192.168.2.101:9999/xxx/login
#Ticket校验器使用Cas30ProxyReceivingTicketValidationFilter
cas.validation-type=CAS3
#cas不拦截的url
ignore-host-url=/external/*

我这边有一个cas不拦截的一个外部接口,所以这边我定义了一个ignore-host-url。

后面需要写java config,做一些相应的操作和定义,代码如下:

CASUtil.java,从cas中获取用户名
public class CASUtil {
	 /**
     * 从cas中获取用户名
     *
     * @param request
     * @return
     */
    public static String getAccountNameFromCas(HttpServletRequest request) {
        Assertion assertion = (Assertion) request.getSession().getAttribute(AbstractCasFilter.CONST_CAS_ASSERTION);
       if(assertion!= null){
           AttributePrincipal principal = assertion.getPrincipal();
           return principal.getName();
       }else return null;
 
    }

}

CASAutoConfig.java,过滤被cas拦截的外部url

@Configuration
public class CASAutoConfig {
    @Value("${cas.server-url-prefix}")
    private String serverUrlPrefix;
    @Value("${cas.server-login-url}")
    private String serverLoginUrl;
    @Value("${cas.client-host-url}")
    private String clientHostUrl;
    @Value("${ignore-host-url}")
    private String ignoreHostUrl;

    /**
     * 授权过滤器
     * @return
     */
    @Bean
    public FilterRegistrationBean filterAuthenticationRegistration() {
        FilterRegistrationBean registration = new FilterRegistrationBean();
        registration.setFilter(new AuthenticationFilter());
        // 设定匹配的路径
        registration.addUrlPatterns("/*");
        Map initParameters = new HashMap<>();
        initParameters.put("casServerLoginUrl", serverUrlPrefix);
        initParameters.put("serverName", clientHostUrl);
        //忽略的url,"|"分隔多个url
        initParameters.put("ignorePattern", ignoreHostUrl);
        registration.setInitParameters(initParameters);
        // 设定加载的顺序
        registration.setOrder(1);
        return registration;
    }
}

因为项目中还有shiro的java config,所以这块的代码不一定是通用版的,不过基本也没什么问题,大体的一个思路是可以看得到的,希望这个能够帮助到有需要用到的童鞋们。

有不懂的地方可以给我留言,或者进群交流!

你可能感兴趣的:(java)