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各大框架,框架重不重咱以后总结,设计思想是值得学习的。相关文章推荐
- Java 如何连接数据库SQL sever2008
- eclipse简单配置struct2 HelloWorld
- Java项目打包发布
- Java基础之抽象类
- Java基础之抽象类
- JAVA科学计数法转普通计数法
- Java 异常基础 Exception
- JAVA如何调用mysql写的存储过程
- java实现汉字转拼音
- test5.8
- java 类型与移位运算
- JAVA中变量和常量的理解
- javaweb转发和重定向的区别
- 使用NetBeans实现表格的增删改
- JAVA程序注解的理解
- 关于JDK的终极环境变量的配置
- Java对象表示方式1:序列化、反序列化和transient关键字的作用
- 关于创建子包(package)的问题
- 第一阶段快结束了。。。。
- Java面向对象的继承