您的位置:首页 > 编程语言 > Java开发

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

2015-09-19 21:00 561 查看

分清Spring security和CAS的职责

[b]CAS职责[/b]

单点认证(自己YY的名词,懂就行):在CAS Server认证后,各Client都认

对不起,没其他的了,其他都是Spring security干的事情!

[b]Spring security职责[/b]

认证各个请求,认证不过,就去做身份认证

此处占两个灰常灰常重要的坑:

坑1:怎么认证请求,判断请求的人有没有验证过,有没有通行证(角色涉及的权限暂不表)

坑2:怎么认证身份,来者是谁,验明正身后给发通行证。

保存、销毁用户信息,并提供查询方式;

配置:

配置Spring security

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

<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>


配置CAS的认证机制

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

[b]何时开始认证?指定CAS的认证时机[/b]

<security:http auto-config="false" entry-point-ref="casEntryPoint">
<security:custom-filter ref="requestSingleLogoutFilter" before="LOGOUT_FILTER"/>
<security:custom-filter ref="singleLogoutFilter" before="CAS_FILTER"/>
<security:custom-filter ref="casFilter" position="CAS_FILTER"/>
</security:http>


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

[b]用什么认证?定义CAS的Filter[/b]

<bean id="casFilter"
class="org.springframework.security.cas.web.CasAuthenticationFilter">
<property name="authenticationManager" ref="authenticationManager"/>
</bean>
<security:authentication-manager alias="authenticationManager">
<security:authentication-provider ref="casAuthenticationProvider"/>
</security:authentication-manager>


[b]如何认证?定义认证的Provider[/b]

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

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


参数说明

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

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

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

[b]CAS认证所需配置信息[/b]

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

<bean id="serviceProperties"
class="org.springframework.security.cas.ServiceProperties">
<property name="service" value="${web.server.login}"/>
<property name="sendRenew" value="false"/>
</bean>


[b]参数说明[/b]

service 这玩意就是CAS Service认证完用户名、密码后回来访问CAS Client的地址;

sendRenew 网上看到某美女程序员说是要不要每次请求都认证一把,当时我就信了。

小结

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

配置用户名&密码认证点

spring security说去AuthenticationEntryPoint处验证。CAS提供实现了该接口的类。

在配置CAS认证时机的时候,其实已经配置了,回顾下

<security:http auto-config="false" entry-point-ref="casEntryPoint">


<bean id="casEntryPoint"
class="org.springframework.security.cas.web.CasAuthenticationEntryPoint">
<property name="loginUrl" value="${cas.server.login}"/>
<property name="serviceProperties" ref="serviceProperties"/>
</bean>


[b]参数说明[/b]

loginUrl 指定CAS Server上登录认证地址,ip:port/cas/login

serviceProperties 同上

总结

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

总结final

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

总结final2

C转JAVA,刚开始慢慢看看Spring各大框架,框架重不重咱以后总结,设计思想是值得学习的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: