`
liuqq
  • 浏览: 52417 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

Spring Security 3 与 CAS单点登录配置-Client

阅读更多
如果CAS配置完成。就可以进行Client的配置了。
以下Client的配置前提是你对Spring Security有一定了解。如果不熟悉,还是希望能先读一下Spring Security相关的文章。

下面是Client的Spring Security 3的最基础的配置

1.配置<http>标签
	<http auto-config="false" entry-point-ref="casEntryPoint" servlet-api-provision="true">
		<intercept-url pattern="/manage/**" access="ROLE_ADMIN" />
		<intercept-url pattern="/**" access="ROLE_USER,ROLE_ADMIN" />
		<!-- logout-success-url="/login.html" -->
		<logout logout-url="/logout.html" success-handler-ref="casLogoutSuccessHandler"/>
		<custom-filter position="FORM_LOGIN_FILTER" ref="casFilter"/>
	</http>

这里,重点是:

* 不使用http的自动配置。
* entry-point-ref="casEntryPoint"作用是认证的入口,是一个实现     AuthenticationEntryPoint接口的类。为ExceptionTranslationFilter类提供认证依据。
* <custom-filter position="FORM_LOGIN_FILTER" ref="casFilter"/> 使用自定义的Filter,放置在过滤器链的FORM_LOGIN_FILTER的位置。

    似乎casFilter与casEntryPoint的功能有重叠。
其实,casEntryPoint只是提供认证入口的作用,当没有权限,将跳转到该地址。
casFilter是处理CAS service ticket的。当无权访问时,会使用casEntryPoint提供认证入口。

2.分别配置casEntryPoint和casFilter
  配置:casEntryPoint
<beans:bean id="casEntryPoint"
	class="org.springframework.security.cas.web.CasAuthenticationEntryPoint">
	<beans:property name="loginUrl" value="https://cas.boc.com:8443/casServer/login"/>
	<beans:property name="serviceProperties" ref="serviceProperties"/>
</beans:bean>
<beans:bean id="serviceProperties" class="org.springframework.security.cas.ServiceProperties">
	<beans:property name="service"
        	value="https://report.boc.com:8443/report/j_spring_cas_security_check"/>
    <beans:property name="sendRenew" value="false"/>
</beans:bean>


  配置casFilter
<beans:bean id="casFilter"
			class="org.springframework.security.cas.web.CasAuthenticationFilter">
		<beans:property name="authenticationManager" ref="authenticationManager"/>
	</beans:bean>
	
	<authentication-manager alias="authenticationManager">
		<authentication-provider ref="casAuthenticationProvider"/>
	</authentication-manager>
	
	<beans:bean id="userDetailsService" class="com.reportstart.security.service.impl.BocUserDetaislServiceImpl">
		<beans:property name="userDao">
			<beans:ref bean="userDao"/>
		</beans:property>
	</beans:bean>
   
	<beans:bean id="casAuthenticationUserDetailsService" class="org.springframework.security.core.userdetails.UserDetailsByNameServiceWrapper">
		<beans:property name="userDetailsService" >
			<beans:ref local="userDetailsService"/>
		</beans:property>
	</beans:bean>
   
	<beans:bean id="casAuthenticationProvider"
			class="org.springframework.security.cas.authentication.CasAuthenticationProvider">
		<beans:property name="authenticationUserDetailsService" ref="casAuthenticationUserDetailsService"/>
		<beans:property name="serviceProperties" ref="serviceProperties" />
		<beans:property name="ticketValidator">
			<beans:bean class="org.jasig.cas.client.validation.Cas20ServiceTicketValidator">
	       		<beans:constructor-arg index="0" value="https://cas.boc.com:8443/casServer" />
	        </beans:bean>
		</beans:property>
		<beans:property name="key" value="an_id_for_this_auth_provider_only"/>
	</beans:bean>
</beans:bean>

如果对Spring Security比较熟悉,就不用多说什么了。
这里的"https://report.boc.com:8443/report/j_spring_cas_security_check"地址要注意,以后这个地址要注册到CAS service里,从而改变CAS的"open model".
也只有这个地址是指向Client的,其他都指向Server


最后,casLogoutSuccessHandler
如果Client要注销,需在Client先注销,之后让Server注销提供的ticket。
如果不这样,不论是只注销Client还是Server,注销后,系统仍然还是可以访问的。
(按照开始的想法,注销Client,Client应该可以主动去Server去注销ticket,但是org.springframework.security.web.authentication.logout.LogoutFilter总注销自己,而不去跟Client交互。如果你知道的话,请告知。)
CasLogoutSuccessHandler 代码
package net.viiso.security.util;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.security.core.Authentication;
import org.springframework.security.web.authentication.logout.LogoutSuccessHandler;
public class CasLogoutSuccessHandler implements LogoutSuccessHandler {

	private String url = "";
	@Override
	public void onLogoutSuccess(HttpServletRequest request,
			HttpServletResponse response, Authentication authentication)
			throws IOException, ServletException {

		if ("".equals(url)) {
			url = "https://cas.boc.com:8443/casServer/logout";
		}
		response.sendRedirect(url);
	}
	public void setTargetUrl(String url) {
		this.url  = url;
	}
}


启动后,对一个安全地址进行访问,会跳到CAS登录地址。
如果登录成功,会跳至访问页。
到此,简单的Client已经配置完成。
接下来,还要在Server注册Client。这个虽然不是必须,但是出于安全考虑,如果CAS服务器在外网,就非常有必要对支持的Client进行注册了,因为当你访问Client在CAS登陆成功后,CAS会给你的Client提供登录者的用户信息。如果你模拟一个Client应用,使用暴力方式,不断给CAS提供用户口令和密码,会对安全性造成破坏。
另外,也可以给CAS登录页加一个验证码。

分享到:
评论
4 楼 bastengao 2012-05-14  
http://static.springsource.org/spring-security/site/docs/3.1.x/reference/cas.html
试了这个,可以正确工作。环境 spring-securty-3.0.7 cas-client-3.1.10 cas-server-3.4.11
3 楼 liuqq 2011-04-15  
liuxiaori 写道
兄弟你好:
最近在研究cas 与spring security 3.0的集成,按照上面的配置,完成后。可以登录。但是提示:
org.springframework.security.authentication.AnonymousAuthenticationToken@6faa3d44: Principal: anonymousUser; Password: [PROTECTED]; Authenticated: true; Details: org.springframework.security.web.authentication.WebAuthenticationDetails@ffff4c9c: RemoteIpAddress: 192.168.1.241; [color=red]SessionId: null;[/color] [color=red]Granted Authorities: ROLE_ANONYMOUS[/color]

但是在数据库中具有ROLE_ADMIN,ROLE_USER角色,以至于无法访问页面。请赐教


看一下你对接口org.springframework.security.core.userdetails.UserDetailsService的实现类里的loadUserByUsername方法,用户是否取得到了角色信息(子应用服务器)
2 楼 liuxiaori 2011-04-02  
兄弟你好:
最近在研究cas 与spring security 3.0的集成,按照上面的配置,完成后。可以登录。但是提示:
org.springframework.security.authentication.AnonymousAuthenticationToken@6faa3d44: Principal: anonymousUser; Password: [PROTECTED]; Authenticated: true; Details: org.springframework.security.web.authentication.WebAuthenticationDetails@ffff4c9c: RemoteIpAddress: 192.168.1.241; [color=red]SessionId: null;[/color] [color=red]Granted Authorities: ROLE_ANONYMOUS[/color]

但是在数据库中具有ROLE_ADMIN,ROLE_USER角色,以至于无法访问页面。请赐教
1 楼 surpass_li 2010-08-25  
CAS3解决了这个问题吧

相关推荐

    Spring Security 3 与 CAS单点登录配置.doc

    Spring Security 3 与 CAS 单点登录配置 Spring Security 3 是一个基于 Java 的安全框架,提供了灵活的身份验证、授权和访问控制功能。CAS(Central Authentication Service)是一种流行的单点登录协议,允许用户...

    spring boot整合CAS Client实现单点登陆验证的示例

    Spring Boot 整合 CAS Client 实现单点登录验证的示例 Spring Boot 整合 CAS Client 是一种流行的解决方案,用于实现单点登录(Single Sign-On,简称 SSO)。在多个应用系统中,用户只需要登录一次就可以访问所有...

    cas-client-core-3.3.3

    CAS(Central Authentication Service)是一种基于Web的单点登录(Single Sign-On, ...通过理解并正确配置`cas-client-core-3.3.3`,你可以轻松地将你的应用程序与CAS服务器集成,从而提供安全、便捷的单点登录体验。

    cas-server-client-springsecurity.zip

    `cas-server-client-springsecurity.zip`是一个预配置的overlay,它已经包含了与Spring Security客户端整合所需的配置和依赖。 **Spring Security整合** Spring Security是Java中一个强大的安全框架,用于处理Web...

    springboot+security+cas集成demo

    1. **配置CAS客户端**:在Spring Boot应用中,我们需要引入CAS客户端库,例如`spring-security-cas`,并配置相关的CAS服务器地址、服务验证URL等。 2. **配置Spring Security**:在Spring Security的配置类中,设置...

    cas 和spring security 单点登录 配置

    单点登录(Single Sign-On,简称SSO)是一种在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统的技术。在企业级应用中,SSO能够提供更便捷的用户体验,同时也增强了安全性。本篇将详细介绍如何...

    SpringBoot+Security+Cas

    总的来说,这个Demo提供了一个基础的示例,展示了如何利用Spring Boot的便捷性,结合Spring Security的强大安全功能,以及CAS的单一登录特性,构建一个安全的Web应用。开发者可以通过研究这个Demo,学习如何配置和...

    spring-security-cas-client-2.0.4.jar

    spring-security-cas-client-2.0.4.jar

    cas-client-3.3.3-release和cas-server-4.2.1-release下载

    - `cas-client-support`: 提供与CAS服务器通信所需的库和配置,如Java过滤器(`CasAuthenticationFilter`)来处理票证验证。 - `cas-client-integration`: 集成示例和指南,帮助开发者将CAS集成到他们的应用中。 ...

    整合spring+springWebMVC+cas客户端

    CAS(Central Authentication Service)是一种开放源码的单点登录(SSO)系统,常用于企业级应用,确保用户只需要登录一次就能访问所有相互信任的应用系统。CAS客户端则负责与CAS服务器进行交互,验证用户的身份。 ...

    cas-client-3.1.12-release.tar.gz

    CAS(Central Authentication Service)是基于Java的开源身份验证框架,主要功能是实现单点登录(Single Sign-On,SSO)。CAS客户端是与CAS服务器交互的部分,使得应用系统能够利用CAS服务进行用户认证。"cas-client...

    单点登录Spring-security+CAS.docx

    总结来说,本文档详细介绍了如何结合Spring Security和CAS搭建单点登录系统,涵盖了创建和配置SSL证书、Tomcat服务器的SSL设置,以及CAS客户端的集成。这个过程涉及到多个步骤,每个步骤都对系统的安全性至关重要。...

    Spring Security集成CAS客户端实例

    本实例旨在展示如何将Spring Security与CAS结合,实现一个高效的单点登录(Single Sign-On,SSO)解决方案。下面,我们将深入探讨这个集成过程。 首先,Spring Security是Spring框架的一部分,专门用于应用程序的...

    spring boot 实现SSO单点登陆

    spring boot整合spring security 实现SSO单点登陆 完整DEMO. 1、配置本地hosts 127.0.0.1 sso-login 127.0.0.1 sso-resource 127.0.0.1 sso-tmall 127.0.0.1 sso-taobao windows系统的路径在C:\WINDOWS\system...

    cas单点登录配置及资源

    下面将详细介绍CAS单点登录的配置及资源的相关知识点。 1. **CAS基础概念** - CAS服务器:提供认证服务的核心组件,处理用户的登录请求,验证成功后生成票证(Ticket)。 - 服务提供商:需要与CAS服务器交互的Web...

    CAS单点登录配置大全

    **CAS单点登录配置大全** CAS(Central Authentication Service,中央认证服务)是一种广泛使用的开源单点登录(Single Sign-On,SSO)协议。它允许用户通过一个统一的认证系统访问多个应用系统,而无需在每个系统...

    spring security3 中文版本

    - `CAS-spring-security-cas-client.jar`:支持 CAS 协议的单点登录功能。 - `OpenID-spring-security-openid.jar`:支持 OpenID 身份验证。 - **获得源代码**:可以从 GitHub 或 Maven 仓库获取 Spring Security ...

    sso/cas单点登录Java maven版 含服务端客服端

    SSO(Single Sign-On)是单点登录的缩写,是一种网络用户身份验证的机制,允许用户在一次登录后访问多个应用系统而无需再次验证。CAS(Central Authentication Service)是SSO的一种实现,由耶鲁大学开发并开源,它...

Global site tag (gtag.js) - Google Analytics