SpringBoot整合cas客户端

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

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

<!--cas的客户端 -->
<dependency>
    <groupId>net.unicon.cas</groupId>
    <artifactId>cas-client-autoconfig-support</artifactId>
    <version>2.2.0-GA</version>
    <exclusions>
        <exclusion>
            <groupId>org.jasig.cas.client</groupId>
            <artifactId>cas-client-core</artifactId>
        </exclusion>
    </exclusions>
</dependency>

<dependency>
    <groupId>org.jasig.cas.client</groupId>
    <artifactId>cas-client-core</artifactId>
     <version>3.5.0</version>
</dependency>

注:这里要特别提醒下,网上有些帖子写的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<String,String> 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,所以这块的代码不一定是通用版的,不过基本也没什么问题,大体的一个思路是可以看得到的,希望这个能够帮助到有需要用到的童鞋们。

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

  • 2
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wal1314520

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值