`
zhang_xzhi_xjtu
  • 浏览: 536557 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Spring Web Security3.0 初体验

阅读更多
看了看Spring Web Security3.0,感觉架构很和谐。
做个小程序验证一下。
需求
1 自定义的user,role,accessDecisionManager。
2 可以配置url和role的对应关系来做web的访问权限。

s1 在web.xml中配置要应用spring web security.这个配置指明了要应用spring security,以及spring的配置文件位置。
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>/WEB-INF/security.xml</param-value>
	</context-param>

	<!-- listener setting-->
	<listener>
		<listener-class>
			org.springframework.web.context.ContextLoaderListener
		</listener-class>
	</listener>

	<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>



s2 在security.xml中加入以下片断,主要由两个目的。1是配置用自己定制的AccessDecisionManager来控制web的访问权限。2是配置用自己定制的UserDetailsService来提供用户信息。
	<beans:bean class="allen.MyAccessDecisionManager"
		id="myAccessDecisionManager">
	</beans:bean>
	<http auto-config="true"
		access-decision-manager-ref="myAccessDecisionManager">
		<anonymous enabled="false" />
		<intercept-url pattern="/**" access="allen" />
	</http>

	<beans:bean class="allen.MyUserDetailsService"
		id="myUserDetailsService">
	</beans:bean>

	<authentication-manager>
		<authentication-provider
			user-service-ref='myUserDetailsService' />
	</authentication-manager>


s3 认证相关:自定义了UserDetails
	private String userName;
	private String password;
	private Collection<GrantedAuthority> auths;

自定义了GrantedAuthority,里面只有一个string来表明role.
定制的MyUserDetailsService,该类实现UserDetailsService,用来提供用户信息,可以从任何地方由用户名取到该用户的信息。这里可以返回自定义的UserDetails。在security.xml里面的配置指明了当需要认证时,就可以从这里得到用户信息。
	@Override
	public UserDetails loadUserByUsername(String arg0)
			throws UsernameNotFoundException, DataAccessException {
		UserDetails details = UserCache.userCache.getUser(arg0);
		return details;
	}


s4 授权相关:
自定义了MyAccessDecisionManager,实现了AccessDecisionManager。在security.xml里面的配置指明了当需要授权检查时,MyAccessDecisionManager会做实际的检查工作。
在decide中,可以得到一切和授权相关的东西。如何做取决于我们想怎么做。
这里检查用户的role能不能访问当前访问的url.

	@Override
	public void decide(Authentication authentication, Object securityObject,
			Collection<ConfigAttribute> arg2) throws AccessDeniedException,
			InsufficientAuthenticationException {

		if (authentication == null || !authentication.isAuthenticated())
			throw new InsufficientAuthenticationException("Not Authenticated");

		Object principal = authentication.getPrincipal();
		MyUserDetails myUserDetails = (MyUserDetails) principal;
		Collection<GrantedAuthority> userRoles = authentication
				.getAuthorities();

		String url = null;
		if (securityObject instanceof FilterInvocation) {
			FilterInvocation filter = (FilterInvocation) securityObject;
			url = filter.getRequestUrl();
		}

		if (!URLManager.manager.canAccessUrl(url, userRoles)) {
			throw new AccessDeniedException("Role check fails.");
		}
	}


小结:spring的web security还是很和谐的。扩展很容易。用着挺舒服。
分享到:
评论
8 楼 kjj 2010-06-13  
angjunwen 写道
不知道大家有没有注意过,如果自定义的一个类去实现 UserDetails ,自定义的类 又关联了另一个 实体类 (比如 group ),当从 SecurityContextHolder.getContext().getAuthentication().getPrincipal() 获得 用户信息时,通过 上下文返回的对象获取关联的group 对象有问题,一直没想明白。

你还别说,我就是这么弄得,你出啥问题了,我用的一点问题都没有!!!
7 楼 angjunwen 2010-06-10  
不知道大家有没有注意过,如果自定义的一个类去实现 UserDetails ,自定义的类 又关联了另一个 实体类 (比如 group ),当从 SecurityContextHolder.getContext().getAuthentication().getPrincipal() 获得 用户信息时,通过 上下文返回的对象获取关联的group 对象有问题,一直没想明白。
6 楼 plusir 2010-05-12  
最近在看这个东西,累啊。

验证那块已经熟悉了,为了练手,自己实现了UserDetails,自己写的UserDetailsService,自己实现的AuthenticationProvider。登陆页面也是自己弄的(我真的很讨厌j_username和j_password)这两个名字:(

下一步研究授权,正在跟踪过滤器调用链。
准备拿掉一些没用的东东,比如那个basic,想不出来什么地方会用到。还有那个匿名xxx的。还有想要支持验证码好像得自己写过滤器插进去了吧(隐约听说有个现成的东东,不过项目的头已经失踪好久了。。。。)
5 楼 angjunwen 2010-05-11  
我用的还是security2.0.5 的版本,感觉用起来还可以。再配合ACL,用起来就更好了,等有时间再把ACL 用起来试试
4 楼 huangtian549 2010-05-11  
西门吹牛 写道
allen什么意思?我照着配出错了

allen是包名吧
3 楼 西门吹牛 2010-05-09  
allen什么意思?我照着配出错了
2 楼 懒萝卜 2010-05-07  
学习了。Spring Security,权限相关,我也想使用,不用老是自己写。
1 楼 cai824 2010-04-12  
很好的学习材料,以前看源程序时不懂的东西,现在很好理解了

相关推荐

    spring security3.0所需要的最精简的jar包

    Spring Security 是一...总之,Spring Security 3.0提供了一套完整的安全解决方案,其核心组件包括了认证、授权、Web安全和对象级别的权限控制。理解和掌握这些jar包的功能,能够帮助开发者有效地构建安全的应用程序。

    Spring-Security3.0自定义表结构

    ### Spring Security 3.0 自定义表结构详解 在企业级应用开发中,Spring Security作为Spring框架...通过以上步骤,开发者可以利用Spring Security 3.0实现高度定制化的权限管理方案,有效提升应用的安全性和用户体验。

    spring security3.0 源码

    spring-security-web-3.0 spring-security-taglibs-3.0 spring-security-openid-3.0 spring-security-core-3.0 spring-security-config-3.0 spring-security-aspects-3.0 spring-security-acl-3.0

    spring security3.0帮助文档

    Spring Security是Spring框架的一个强大且高度可定制的安全模块,用于保护基于Web和非Web的应用程序。版本3.0的发布带来了许多改进和新特性,使其成为处理安全需求的首选解决方案。本文将深入探讨Spring Security ...

    spring security3.0 demo

    这个“spring security3.0 demo”很可能是为了展示如何在实际应用中配置和使用Spring Security。 首先,Spring Security的核心概念包括: 1. **Filter Security Interceptor (FSI)**:这是Spring Security的主要...

    springMVC+springSecurity3.0+maven

    标题 "springMVC+springSecurity3.0+maven" 指的是一个集成项目,它结合了Spring MVC、Spring Security 3.0和Maven这三个关键的Java开发工具和技术。让我们逐一深入理解这些技术及其相互之间的关系。 首先,Spring ...

    SpringSecurity3.0 教程

    SpringSecurity3.0是Spring框架的一个重要扩展,主要用于企业级应用的安全管理,提供了一套全面的访问控制和安全解决方案。本教程将深入探讨SpringSecurity3.0的核心概念、配置及其实现方式,帮助开发者理解并掌握...

    Spring-Security2.0 和 3.0中文文档

    在Spring Security 2.0 和 3.0 版本中,有一些重要的变化和新特性: 1. **模块化架构**: Spring Security 2.0 提供了基础的认证和授权功能,而3.0进一步强化了模块化设计。这使得开发者可以根据项目需求选择合适...

    SpringSecurity3.0 Demo

    在本项目"SpringSecurity3.0 Demo"中,我们将深入探讨SpringSecurity 3.0版本的功能和用法。 首先,SpringSecurity的核心功能包括用户认证(Authentication)和权限授权(Authorization)。在3.0版本中,它引入了更...

    SpringSecurity3.0.x官方参考文档(英文+中文双解版)

    **Spring Security 3.0.x 知识点详解** Spring Security 是一个强大的和高度可定制的身份验证和访问控制框架,广泛应用于Java企业级应用的安全管理。Spring Security 3.0.x 版本是该框架的一个重要里程碑,它提供了...

    SpringSecurity_3.0

    《SpringSecurity_3.0》是一本面向Java Web开发初学者和中级程序员的教程,它深入浅出地介绍了Spring Security这一强大的安全框架。Spring Security是一个为Java应用提供身份验证和授权服务的开源项目,它旨在保护...

    教你使用 SpringSecurity 3.0

    教你使用 SpringSecurity 3.0 一步一步教你使用SpringSecurity,从保护web应用到保护业务方法调用

    Spring Security 3.0 权限管理

    在实际应用中,Spring Security可用来保护RESTful API、Web页面、服务层方法等。它可以限制对特定URL的访问,也可以在Controller或Service层进行细粒度的权限控制。 总结,Spring Security 3.0 的权限管理系统为...

    spring security3.0所有最新开发包及源码及文档

    在Spring Security 3.0版本中,这个框架进行了大量的改进和增强,以适应不断变化的安全需求。 Spring Security的核心概念包括: 1. **过滤器链**:这是Spring Security的主要执行机制,它通过一系列自定义的过滤器...

    spring-security-3.0 GA

    《Spring Security 3.0 GA 入门与深入解析》 Spring Security 是一款强大的安全框架,广泛应用于Java Web 应用程序的安全管理。在3.0 GA版本中,该框架进一步提升了性能,优化了API,并增加了许多新特性,使得安全...

    spring security 3.0入门教程PDF

    Spring Security 3.0是该框架的一个重要版本,提供了许多安全控制功能,用于保护Web应用程序不受到黑客的攻击。 ### Spring Security 3.0入门知识点: 1. **Spring Security概述**: Spring Security是一个提供...

    spring3.0+spring security3.1.4 api chm 中文版

    《Spring 3.0 + Spring Security 3.1.4 API 中文版》是一份集成了Spring框架3.0和Spring Security 3.1.4的中文帮助文档,旨在为开发者提供详尽的API参考和指导。这两个核心组件在企业级Java应用开发中扮演着至关重要...

    Spring Security-3中文官方文档(及教程)

    9. **RESTful服务安全**:对于RESTful API,Spring Security提供了JWT(JSON Web Token)支持,允许安全地传输认证和授权信息。 10. **自定义**:Spring Security的灵活性允许开发者根据需求创建自定义策略和组件,...

    spring security 3.0x remember-me 免登陆

    Spring Security 是一个强大的Java安全框架,它为Web应用程序提供了全面的安全解决方案。在3.0.x版本中,"remember-me"功能是Spring Security提供的一种便捷方式,允许用户在关闭浏览器后仍能在一段时间内保持登录...

Global site tag (gtag.js) - Google Analytics