栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

SSO单点登录(二)SpringBoot创建CAS客户端

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SSO单点登录(二)SpringBoot创建CAS客户端

CAS创建服务端:SSO单点登录(一)创建CAS服务端_我是混IT圈的-CSDN博客

由于CAS需要用到域名,所以需要把本地ip映射成域名,参考文档:Win10 如何把本地ip映射成域名_我是混IT圈的-CSDN博客

cas客户端示例下载:https://github.com/cas-projects/cas-sample-java-webapp

这个CAS客户端是一个maven项目,可以参考,但是如果想要和springboot整合,可以看下面的配置。

SpringBoot创建CAS客户端如下: SpringBoot的版本:
2.4.10
pom.xml:
        
            org.springframework.boot
            spring-boot-starter
        
        
            org.springframework.boot
            spring-boot-starter-web
        
        
            org.springframework.boot
            spring-boot-starter-thymeleaf
        

        
        
            net.unicon.cas
            cas-client-autoconfig-support
            2.0.0-GA
        
配置文件:application.properties 
#端口号
server.port=8888
#CAS服务端的地址
cas.server-url-prefix=http://sso.cas.com:8080/cas
#客户端如果要登录,会跳转到统一的服务认证中的登录界面,也就是CAS服务端的登录地址
cas.server-login-url=http://sso.cas.com:8080/cas/login
#客户端在CAS服务端登录成功后,自动从CAS服务端跳转回客户端的地址
cas.client-host-url=http://a.cas.com:8888
#校验后的CAS服务端颁发给客户端的用户信息是否需要放入session中。session获取用户信息,key:_const_cas_assertion_  value:assertion
cas.use-session=true
#Ticket校验器使用 Cas30ProxyReceivingTicketValidationFilter
cas.validation-type=CAS3
#不需要拦截的请求,可以用*做模糊匹配,多个用【|】竖线隔开
udf.ignorePattern=/home.html|
@Configuration
public class CasConfig {

    @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("${udf.ignorePattern}")
    private String ignorePattern;
    @Value("${udf.ignoreUrlPatternType}")
    private String ignoreUrlPatternType;
    @Value("${cas.use-session}")
    private String useSession;


    
    @Bean
    public FilterRegistrationBean filterSingleRegistration() {
        final FilterRegistrationBean registration = new FilterRegistrationBean();
        registration.setFilter(new SingleSignOutFilter());
        // 设定匹配的路径
        registration.addUrlPatterns("
    @Bean
    public ServletListenerRegistrationBean singleSignOutListenerRegistration() {
        ServletListenerRegistrationBean registrationBean = new ServletListenerRegistrationBean<>();
        registrationBean.setListener(new SingleSignOutHttpSessionListener());
        // 设定加载的顺序
        registrationBean.setOrder(1);
        return registrationBean;
    }

    
    @Bean
    public FilterRegistrationBean filterAuthenticationRegistration() {
        final FilterRegistrationBean registration = new FilterRegistrationBean();
        registration.setFilter(new AuthenticationFilter());
        // 设定匹配的路径
        registration.addUrlPatterns("
    @Bean
    public FilterRegistrationBean filterValidationRegistration() {
        final FilterRegistrationBean registration = new FilterRegistrationBean();
        registration.setFilter(new Cas30ProxyReceivingTicketValidationFilter());
        // 设定匹配的路径
        registration.addUrlPatterns("
    @Bean
    public FilterRegistrationBean filterWrapperRegistration() {
        final FilterRegistrationBean registration = new FilterRegistrationBean();
        registration.setFilter(new HttpServletRequestWrapperFilter());
        // 设定匹配的路径
        registration.addUrlPatterns("
public class SimpleUrlPatternMatcherStrategy implements UrlPatternMatcherStrategy {

    //配置文件配置的不需要拦截的请求
    private Pattern pattern;

    @Override
    public boolean matches(String url) {
        //在此可以做额外的扩展,比如判断是insert也放行 可以通过查询数据库来进行动态判断
        if(url.contains("/insert")){
            return true;
        }
        //默认是根据 cas.ignore-pattern 来判断是否否满足过滤
        return this.pattern.matcher(url).find();
    }

    
    @Override
    public void setPattern(String pattern) {
        this.pattern = Pattern.compile(pattern);
    }
}
HomeController:
package com.example.casclientb.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

import javax.servlet.http.HttpServletRequest;

@Controller
public class HomeController {

    //首页,不需要登录就可以进来
    @GetMapping(value = "/home.html")
    public String index(HttpServletRequest request){
        return "home";
    }

    //详情页面,需要登录
    @GetMapping(value = "/details.html")
    public String list(HttpServletRequest request){
        //cas校验后保存到session中的用户信息,要在session中获取到这个信息,必须在配置中配置。
        Object assertion = request.getSession().getAttribute("_const_cas_assertion_");
        System.out.println(assertion);
        return "details";
    }
}
首页:home.html



    
    Title
    


  

这里是淘宝首页,不需要登录

详情
详情页:details.html



    
    Title
    


    这是淘宝详情页面,需要登录
退出
首页
 启动类,添加注解:
//启动CAS @EnableCasClient
@EnableCasClient

由于CAS是默认使用https的,那么为了能测试,需要把CAS服务端配置成能使用http协议。如何配置成http,那么看这篇文章:SSO单点登录(一)创建CAS服务端_我是混IT圈的-CSDN博客

上面的配置都可以实现单点登录和单点退出的功能。

下一篇文章请期待:shiro和cas的整合。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/667199.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号