spring security 3整合cas client用于实现各Application之间的单点登录。

1. 需要准备的jar

spring-security-core-3.0.8.RELEASE.jar
spring-security-web-3.0.8.RELEASE.jar
spring-security-config-3.0.8.RELEASE.jar
spring-security-cas-client-3.0.8.RELEASE.jar
cas-client-core-3.2.1.jar (jasig)

  

2. web.xml

  web.xml中加入context param 和 filter

<!--context configuration-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springSecurity.xml</param-value>
</context-param>
<!-- Spring security filter -->
<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>

3. spring security cas-client配置

  springSecurity.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:security="http://www.springframework.org/schema/security"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:beans="http://www.springframework.org/schema/beans"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/security
http://www.springframework.org/schema/security/spring-security-3.0.xsd"> <!-- cas拦截规则 -->
<security:http auto-config="true" entry-point-ref="casAuthEntryPoint" servlet-api-provision="true">
<security:intercept-url pattern="/login.do" access="ROLE_USER,ROLE_ADMIN"/>
<security:intercept-url pattern="/report/*.do" access="ROLE_USER,ROLE_ADMIN"/>
<security:intercept-url pattern="/packages/*add.do" access="ROLE_USER,ROLE_ADMIN"/>
<security:intercept-url pattern="/packages/*delete.do" access="ROLE_USER,ROLE_ADMIN"/>
<security:intercept-url pattern="/packages/*edit.do" access="ROLE_USER,ROLE_ADMIN"/>
<security:intercept-url pattern="/resource/*.do" access="ROLE_USER,ROLE_ADMIN"/>
<security:intercept-url pattern="/equip/*.do" access="ROLE_ADMIN"/>
<security:custom-filter ref="casAuthenticationFilter" position="CAS_FILTER"/>
<security:custom-filter ref="requestSingleLogoutFilter" before="LOGOUT_FILTER" />
<security:custom-filter ref="singleLogoutFilter" before="CAS_FILTER" />
</security:http> <!-- CAS认证切入点,声明cas服务器端登录的地址 -->
<bean id="casAuthEntryPoint" class="org.springframework.security.cas.web.CasAuthenticationEntryPoint">
     <!-- 此处loginUrl必须和浏览器中访问的地址一致 -->
<property name="loginUrl" value="http://10.10.144.51:8081/cas"/>
<property name="serviceProperties" ref="casService"/>
</bean> <!-- 在认证管理器中注册cas认证提供器 -->
<security:authentication-manager alias="authenticationManager">
<security:authentication-provider ref="casAuthenticationProvider" />
</security:authentication-manager> <!-- 登录成功后的返回地址 -->
<bean id="casService" class="org.springframework.security.cas.ServiceProperties">
<property name="service" value="http://10.10.144.130:8080/provisioningApp/j_spring_cas_security_check"/>
<property name="sendRenew" value="false" />
</bean> <!-- cas 认证过滤器 -->
<bean id="casAuthenticationFilter" class="org.springframework.security.cas.web.CasAuthenticationFilter">
<property name="authenticationManager" ref="authenticationManager"/>
<property name="authenticationFailureHandler" ref="authenticationFailureHandler" />
<property name="authenticationSuccessHandler" ref="authenticationSuccessHandler" />
<property name="filterProcessesUrl" value="/j_spring_cas_security_check" />
</bean> <!-- cas 认证失败控制器 -->
<bean id="authenticationFailureHandler"
class="org.springframework.security.web.authentication.SimpleUrlAuthenticationFailureHandler">
<property name="defaultFailureUrl" value="/error.jsp" />
</bean>
<!-- cas 认证成功控制器 -->
<bean id="authenticationSuccessHandler"
class="org.springframework.security.web.authentication.SimpleUrlAuthenticationSuccessHandler">
<property name="alwaysUseDefaultTargetUrl" value="true" />
<property name="defaultTargetUrl" value="/sim/init.do" />
</bean> <!-- 注销客户端 -->
<bean id="singleLogoutFilter" class="org.jasig.cas.client.session.SingleSignOutFilter" /> <!-- 注销服务器端 -->
<bean id="requestSingleLogoutFilter"
class="org.springframework.security.web.authentication.logout.LogoutFilter">
<constructor-arg value="http://10.10.144.51:8081/cas/logout" />
<constructor-arg>
<bean class="org.springframework.security.web.authentication.logout.SecurityContextLogoutHandler" />
</constructor-arg>
<property name="filterProcessesUrl" value="/j_spring_cas_security_logout" />
</bean> <!-- cas认证提供器,定义客户端的验证方式 -->
<bean id="casAuthenticationProvider" class="org.springframework.security.cas.authentication.CasAuthenticationProvider">
<property name="ticketValidator" ref="casTicketValidator"></property>
<property name="serviceProperties" ref="casService"></property>
<property name="key" value="an_id_for_this_auth_provider_only"></property>
<property name="authenticationUserDetailsService" ref="authenticationUserDetailsService"></property>
</bean>
<!-- 配置ticket validator -->
<bean id="casTicketValidator" class="org.jasig.cas.client.validation.Cas20ServiceTicketValidator">
<constructor-arg value="http://10.10.144.51:8081/cas/"/>
</bean> <bean id="authenticationUserDetailsService" class="org.springframework.security.core.userdetails.UserDetailsByNameServiceWrapper">
<property name="userDetailsService" ref="jdbcUserService"/>
</bean>

  <!-- 这里没有实现custom service就直接采用security自带的jdbcdao实现来进行数据库操作,这里我们重写了sql -->
<bean id="jdbcUserService" class="org.springframework.security.core.userdetails.jdbc.JdbcDaoImpl">
<property name="dataSource" ref="dataSource"/>
<property name="enableGroups" value="true"/>
<property name="enableAuthorities" value="false"/>
     <!-- sql查询字段的个数必须与源码中的字段数对应起来,否则会报错 -->
<property name="usersByUsernameQuery">
<value>
select username, password,1 from user where username = ?
</value>
</property>
<property name="groupAuthoritiesByUsernameQuery">
<value>
select username, department, authority from user where username = ?
</value>
</property>
</bean>

  <!-- 定义数据源 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="com.mysql.jdbc.Driver"></property>
<property name="jdbcUrl" value="jdbc:mysql://10.10.144.51:3306/prvn"></property>
<property name="minPoolSize" value="1"></property>
<property name="maxPoolSize" value="25"></property>
<property name="initialPoolSize" value="3"></property>
<property name="acquireIncrement" value="1"></property>
<property name="maxIdleTime" value="600"></property>
<property name="idleConnectionTestPeriod" value="0"></property>
<property name="acquireRetryAttempts" value="30"></property>
<property name="acquireRetryDelay" value="1000"></property>
<property name="breakAfterAcquireFailure" value="true"></property>
<property name="checkoutTimeout" value="0"></property>
<property name="testConnectionOnCheckout" value="false"></property>
<property name="properties">
<props>
<prop key="user">pvnUser</prop>
<prop key="password">123456</prop>
</props>
</property>
</bean>
</beans>

Spring Security 3整合CAS 实现SSO的更多相关文章

  1. CAS Spring Security 3 整合配置(转)

    一般来说, Web 应用的安全性包括用户认证( Authentication )和用户授权( Authorization )两个部分.用户认证指的是验证某个用户是否为系统中的合法主体,也就是说用户能否 ...

  2. SpringCloud微服务实战——搭建企业级开发框架(四十):使用Spring Security OAuth2实现单点登录(SSO)系统

    一.单点登录SSO介绍   目前每家企业或者平台都存在不止一套系统,由于历史原因每套系统采购于不同厂商,所以系统间都是相互独立的,都有自己的用户鉴权认证体系,当用户进行登录系统时,不得不记住每套系统的 ...

  3. Spring Security(20)——整合Cas

    整合Cas 目录 1.1           配置登录认证 1.1.1     配置AuthenticationEntryPoint 1.1.2     配置CasAuthenticationFilt ...

  4. Spring Security 集成CAS实现单点登录

    参考:http://elim.iteye.com/blog/2270446 众所周知,Cas是对单点登录的一种实现.本文假设读者已经了解了Cas的原理及其使用,这些内容在本文将不会讨论.Cas有Ser ...

  5. Spring Boot:整合Spring Security

    综合概述 Spring Security 是 Spring 社区的一个顶级项目,也是 Spring Boot 官方推荐使用的安全框架.除了常规的认证(Authentication)和授权(Author ...

  6. Spring Security 整合JWT(四)

    一.前言 本篇文章将讲述Spring Security 简单整合JWT 处理认证授权 基本环境 spring-boot 2.1.8 mybatis-plus 2.2.0 mysql 数据库 maven ...

  7. 使用Spring MVC测试Spring Security Oauth2 API

    不是因为看到希望了才去坚持,而坚持了才知道没有希望. 前言 在Spring Security源码分析十一:Spring Security OAuth2整合JWT和Spring Boot 2.0 整合 ...

  8. Spring Boot2.0使用Spring Security

     一.Spring Secutity简介     Spring 是一个非常流行和成功的 Java 应用开发框架.Spring Security 基于 Spring 框架,提供了一套 Web 应用安全性 ...

  9. Spring Security 认证执行流程

    本文基于 Spring Security 5.x 推荐阅读: 项目集成Spring Security SpringSecurity 整合 JWT 一.外层-正常登陆调用 项目启动后会自动寻找 User ...

随机推荐

  1. android手动修改density(dpi)的方法

    Android系统中会根据屏幕分辨率范围,制定默认的density,既320(xhdpi),那么我们也可以手动修改density. 修改的方式在system.prop中修改ro.sf.lcd_dens ...

  2. viewBox A-Z滚动样式

    效果图:       代码实现 (其中使用了ionic框架...) html 代码: <ion-content class='page-location'> <div class=' ...

  3. 几个常见的布局的多种实现方式及margin负值总结

    第一部分:几个常见的布局实现方式 一.左右两边固定, center中间自适应未知 html代码中 center 部分首先要放在box的最前部分.然后是left,right 圣杯布局: <div ...

  4. Chrome和IE中使用window.open函数

    做前端开发的人员经常回遇到使用windows.open这个函数来打开一个新的网页窗口,使用这个函数的时候有些需要注意的地方,在Chrome和IE下该函数还是有一些细节性的区别. 以下是我在项目中使用的 ...

  5. winform 使用 ReportViewer做报表

    之前用过的水晶报表觉得有些麻烦,因此尝试了使用微软自带的报表. 第一种方法是 在winform界面上放置ReportViewer界面,相关的代码如下: public DataTable dt; pri ...

  6. Java进阶(三)多线程开发关键技术

    原创文章,同步发自作者个人博客,转载请务必以超链接形式在文章开头处注明出处http://www.jasongj.com/java/multi_thread/. sleep和wait到底什么区别 其实这 ...

  7. ionic的tabs

    <ion-tabs class="tabs-icon-top/bottom(决定这个tabs是置于上面还是底部)  tabs-color-active-positive(图标与字体色) ...

  8. js操作做GridView

    一:获取当前选中行的数据 function fun_selectedInfo() { //获取当前鼠标选中元素 var e=event.srcElement; //获取当前元素所在行号 var row ...

  9. web安全之sql注入报错型注入

    前提: echo mysql_error(),输出错误信息. 熟悉的函数: floor()向下取整 concat()返回的字符串参数连接的结果 count()函数返回匹配指定条件的行数 rand()函 ...

  10. Python 中的虚拟环境

    检查系统是否安装了virtualenv: $ virtualenv --version 创建虚拟环境venv(名字可以随便取,一般为venv): $ virtualenv venv 使用虚拟环境ven ...