简单的单点登陆系统分析

前言:在公司的系统中用到了单点登陆,虽然看懂了代码但是隔几天再看又是一头雾水,所以总结一下。

参考:https://www.cnblogs.com/Eleven-Liu/p/10336181.html(极好)

目录

第一章 单点登陆简析

第二章 系统概要

第三章 LoginAuthenticationFilter

第四章 TicketValidationFilter

第五章 UserAdapterFilterRegistration

第六章 前后端分离项目单点登陆的设计

第一章 单点登陆简析

1.用户请求CAS客服端(服务)

2.CAS客户端检验没登陆,重定向用户请求到,CAS服务器

3.CAS服务器返回给用户登陆界面,用户在登陆界面进行登陆

4.CAS服务器产生凭证ticket,并重定向用户请求到CAS客户端。

5.CAS接受到请求中的ticket后,发送ticket到CAS服务端进行验证。

6.CAS服务器验证通过,返回用户的用户名到CAS客户端,并在CAS客户端设置session,用户登陆成功。

第二章 系统概要

公司系统中用到的单点登录必选配置主要有三个,通过过滤器进行注册,先后顺序为:

LoginAuthenticationFilter->TicketValidationFilter->UserAdapterFilter

系统会依次经过三个过滤器,LoginAuthenticationFilter、TicketValidationFilter、UserAdapterFilter,然后就可以访问我们需要访问的请求了。

下面是三个过滤器的配置

@Configuration
public class WebSecurityConfigurer {
	
	@Value("${service.domain}")
	private String domain;

    /**
     * 第一步:该过滤器负责用户的认证工作,必须启用它;serverName中填写第三方应用所在服务器的连接地址
     * @return
     */
	@Bean
    public FilterRegistrationBean casFilterRegistration() {

        FilterRegistrationBean registration = new FilterRegistrationBean();

        registration.setFilter(new LoginAuthenticationFilter());
        registration.addInitParameter("casServerLoginUrl","https://sso.xxxx.com/cas/login");
        registration.addInitParameter("serverName",domain);
        registration.addUrlPatterns("/*");//
        return registration;
    }

    /**
     * 该过滤器负责对Ticket的校验工作,必须启用它;serverName中填写第三方应用所在服务器的连接地址
     * @return
     */
    @Bean
    public FilterRegistrationBean casValidationFilterRegistration() {

        FilterRegistrationBean registration = new FilterRegistrationBean();

        registration.setFilter(new TicketValidationFilter());
        registration.addInitParameter("casServerUrlPrefix","https://sso.xxxx.com/cas");
        registration.addInitParameter("serverName",domain);
        registration.addUrlPatterns("/*");

        return registration;
    }


    /**
     * 初始化cookie
     * @return
     */
    @Bean
    public FilterRegistrationBean UserAdapterFilterRegistration() {

        FilterRegistrationBean registration = new FilterRegistrationBean();

        registration.setFilter(new UserAdapterFilter());
        registration.addUrlPatterns("/*");

        return registration;
    }
    
}

第三章 LoginAuthenticationFilter

现在开始看第一个过滤器LoginAuthenticationFilter。

如果我们的请求是以apis打头的,表明不需要经过权限校验可以直接放行到下一个过滤器。

如果不是以apis打头的则在request中查找用户的邮箱(即用户名),先从cookie中进行检索,再从session中进行检索(代码2)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值