CAS+Spring security实现单点登录之配置篇

分清Spring security和CAS的职责

CAS职责
  • 单点认证(自己YY的名词,懂就行):在CAS Server认证后,各Client都认
  • 对不起,没其他的了,其他都是Spring security干的事情!
Spring security职责
  • 认证各个请求,认证不过,就去做身份认证
    此处占两个灰常灰常重要的坑:
    • 坑1:怎么认证请求,判断请求的人有没有验证过,有没有通行证(角色涉及的权限暂不表)
    • 坑2:怎么认证身份,来者是谁,验明正身后给发通行证。
  • 保存、销毁用户信息,并提供查询方式;

配置:

配置Spring security

配置特定的servlet filter,配置位置:web.xml

<filter>
    <filter-name>springSecurityFilterChainfilter-name>
    <filter-class>org.springframework.web.filter.DelegatingFilterProxyfilter-class>
filter>
<filter-mapping>
    <filter-name>springSecurityFilterChainfilter-name>
    /*
filter-mapping>

配置CAS的认证机制

对应上述坑1。配置地址:spring security的配置文件,例如spring-security.xml什么的

何时开始认证?指定CAS的认证时机
http auto-config="false" entry-point-ref="casEntryPoint">
    filter ref="requestSingleLogoutFilter" before="LOGOUT_FILTER"/>
    filter ref="singleLogoutFilter" before="CAS_FILTER"/>
    filter ref="casFilter" position="CAS_FILTER"/>  
http>

说明:spring security采用filterchain来处理request,它定义了一套处理点,详见官方文档:spring security reference。另,偷偷加入了logout的处理,道理是类似的。

用什么认证?定义CAS的Filter
id="casFilter"
    class="org.springframework.security.cas.web.CasAuthenticationFilter">
    <property name="authenticationManager" ref="authenticationManager"/>

alias="authenticationManager">
        ref="casAuthenticationProvider"/>
如何认证?定义认证的Provider

按照spring security的玩法,实际做认证逻辑的是authenticationProvider,即此处的casAuthenticationProvider:

id="casAuthenticationProvider"
    class="org.springframework.security.cas.authentication.CasAuthenticationProvider">
    <property name="authenticationUserDetailsService">
       class="org.springframework.security.core.userdetails.UserDetailsByNameServiceWrapper">
            ref="MyUserDetailsImpl"/>
       
    property>
    <property name="serviceProperties" ref="serviceProperties"/>
    <property name="ticketValidator">
        class="org.jasig.cas.client.validation.Cas20ServiceTicketValidator">
            "0" value="${cas.server.validator}"/>
        
    property>
    <property name="key" value="casAuthProviderKey"/>

参数说明

  • 保存认证信息的类,没错,必须实现某个spring security定义好的接口,它就是UserDetailsService

  • 票据认证,也就是产生了票据,我怎么认证票据是否是正确的呢,此处插入了CAS的认证类。

  • 服务属性,存点信息,和我们处理相关的信息

CAS认证所需配置信息

ServiceProperties处放CAS的各种杂七杂八的配置。

id="serviceProperties"
    class="org.springframework.security.cas.ServiceProperties">
    <property name="service" value="${web.server.login}"/>
    <property name="sendRenew" value="false"/>
参数说明
  • service 这玩意就是CAS Service认证完用户名、密码后回来访问CAS Client的地址;
  • sendRenew 网上看到某美女程序员说是要不要每次请求都认证一把,当时我就信了。

小结

到此已经填完了坑1,开始填坑2,即跑去验明正身。

配置用户名&密码认证点

spring security说去AuthenticationEntryPoint处验证。CAS提供实现了该接口的类。
在配置CAS认证时机的时候,其实已经配置了,回顾下

<security:http auto-config="false" entry-point-ref="casEntryPoint">
id="casEntryPoint"
   class="org.springframework.security.cas.web.CasAuthenticationEntryPoint">
    <property name="loginUrl" value="${cas.server.login}"/>
    <property name="serviceProperties" ref="serviceProperties"/>
参数说明
  • loginUrl 指定CAS Server上登录认证地址,ip:port/cas/login
  • serviceProperties 同上

总结

至此,两个坑填完,配置也就基本配完了。还剩余spring security的角色什么的,放在spring securtiy的总结篇再折腾。

总结final

认证总体框架是spring security的,我们只需要给spring security的几个坑填上CAS的机制而已。

总结final2

C转JAVA,刚开始慢慢看看Spring各大框架,框架重不重咱以后总结,设计思想是值得学习的。

你可能感兴趣的:(Angular,CAS)