`
ganen11
  • 浏览: 6245 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

SpringSecurity3配置及原理简介

阅读更多

SpringSecurity3的核心类有三种 
1.URL过滤器或方法拦截器:用来拦截URL或者方法资源对其进行验证,其抽象基类为AbstractSecurityInterceptor
2.资源权限获取器:用来取得访问某个URL或者方法所需要的权限,接口为SecurityMetadataSource 
3.访问决策器:用来决定用户是否拥有访问权限的关键类,其接口为AccessDecisionManager。 

调用顺序为:AbstractSecurityInterceptor调用SecurityMetadataSource取得资源的所有可访问权限,然后再调用AccessDecisionManager来实现决策,确定用户是否有权限访问该资源。 

SecurityMetadataSource包括MethodSecurityMetadataSource和FilterInvocationSecurityMetadataSource,分别对应方法和URL资源。 

你也可以完全自定义自己的过滤器、资源权限获取器、访问决策器,下面给出完整的springsecurity3的配置文件:

Java代码  收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2.   
  3. <beans:beans xmlns="http://www.springframework.org/schema/security"  
  4.   xmlns:beans="http://www.springframework.org/schema/beans"  
  5.   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  6.   xsi:schemaLocation="http://www.springframework.org/schema/beans  
  7.            http://www.springframework.org/schema/beans/spring-beans-3.0.xsd  
  8.            http://www.springframework.org/schema/security  
  9.            http://www.springframework.org/schema/security/spring-security-3.0.xsd">  
  10.       
  11.     <beans:bean id="loggerListener" class="org.springframework.security.authentication.event.LoggerListener" />  
  12.       
  13.     <http auto-config="true" access-denied-page="/403.jsp">  
  14.         <intercept-url pattern="/css/**" filters="none" />  
  15.         <intercept-url pattern="/images/**" filters="none" />  
  16.         <intercept-url pattern="/js/**" filters="none" />  
  17.         <intercept-url pattern="/403.jsp" filters="none" />  
  18.         <intercept-url pattern="/" filters="none" />  
  19.         <intercept-url pattern="/login.jsp" filters="none" />  
  20.         <form-login login-page="/login.jsp" authentication-failure-url="/login.jsp?error=true" default-target-url="/finance/index.do?listId=CONSUMPTION&page.rowCount=10" />  
  21.         <logout logout-success-url="/login.jsp"/>  
  22.           
  23.         <!-- 防止同一用户多次登录,使第二次登录失败  -->  
  24.         <session-management>  
  25.             <concurrency-control max-sessions="1" error-if-maximum-exceeded="true" />  
  26.         </session-management>  
  27.           
  28.          <!-- 增加一个filter,这点与Acegi是不一样的,不能修改默认的filter了,这个filter位于FILTER_SECURITY_INTERCEPTOR之前 -->  
  29.         <custom-filter before="FILTER_SECURITY_INTERCEPTOR" ref="urlSecurityFilter" />  
  30.     </http>  
  31.   
  32.     <!-- 一个自定义的filter,必须包含authenticationManager,accessDecisionManager,securityMetadataSource三个属性,  
  33.         我们的所有控制将在这三个类中实现,解释详见具体配置 -->  
  34.     <beans:bean id="urlSecurityFilter" class="com.maxjay.main.system.web.filter.UrlSecurityInterceptorFilter">  
  35.         <beans:property name="authenticationManager" ref="authenticationManager" />  
  36.         <beans:property name="accessDecisionManager" ref="securityAccessDecisionManager" />  
  37.         <beans:property name="securityMetadataSource" ref="urlSecurityMetadataSource" />  
  38.     </beans:bean>  
  39.   
  40.     <!-- 认证管理器,实现用户认证的入口,主要实现UserDetailsService接口即可 -->  
  41.     <authentication-manager alias="authenticationManager">  
  42.         <authentication-provider user-service-ref="userService">  
  43.             <!--   如果用户的密码采用加密的话,可以加点“盐”  
  44.                 <password-encoder hash="md5" />  
  45.             -->  
  46.         </authentication-provider>  
  47.     </authentication-manager>  
  48.   
  49. </beans:beans>  


其中userService实现了UserDetailsService用来与自己的用户表进行适配,UrlSecurityInterceptorFilter继承了AbstractSecurityInterceptor并实现了Filter接口,urlSecurityMetadataSource实现了FilterInvocationSecurityMetadataSource接口,securityAccessDecisionManager实现了AccessDecisionManager接口,它们都通过spring的注解声明为容器的一个对象,所以在配置文件中才能直接引用。 

springsecurity3有提供了几个已经实现好的访问决策器,其抽象类为AbstractAccessDecisionManager,它使用投票机制(AccessDecisionVoter)来确定用户有没有权限访问某资源,其实现类有三个: 
AffirmativeBased:只要有一个投票器通过即审核通过 
ConsensusBased:只有当赞成票>反对票时 审核才会通过 
UnanimousBased:只要有一个投票器反对,审核就不通过 
你可以直接使用该抽象类的实现类,其配置如下: 

Java代码  收藏代码
  1. <beans:bean id="accessDecisionManager" class="org.springframework.security.access.vote.AffirmativeBased">  
  2.         <!-- false意味着当配置的投票器只投了弃权票时,不允许继续执行 -->  
  3.         <beans:property name="allowIfAllAbstainDecisions" value="false"/>  
  4.         <!-- 配置该决策器所需要的投票器 -->  
  5.         <beans:property name="decisionVoters">  
  6.             <beans:list>  
  7.                 <beans:bean class="org.springframework.security.access.vote.RoleVoter"/>  
  8.                 <beans:bean class="org.springframework.security.access.vote.AuthenticatedVoter"/>  
  9.             </beans:list>  
  10.         </beans:property>  
  11.     </beans:bean>  
分享到:
评论

相关推荐

    Spring security

    看Spring 的官方例子,只知道copy它的配置,可是不知道具体的细节和原理。 其实这些都不是问题,为了帮助学生理清思路把抽象的东西变的更加具体,我用Freemind 画了一幅Spring Security的一个整体概况图,从大的方向...

    spring security 参考手册中文版

    3. Spring Security 4.2的新特性 27 3.1 Web改进 27 3.2配置改进 28 3.3杂项 28 4.样品和指南(从这里开始) 28 5. Java配置 29 5.1 Hello Web安全Java配置 29 5.1.1 AbstractSecurityWebApplicationInitializer 31 ...

    SpringSecurity框架原理.png

    该图是作者在分析SpringSecurity框架源代码之后梳理出来的Spring Security框架得启动原理图,即SpringSecurity是如何获取过滤器参数配置并调用相应的过滤器的;

    Spring Security详细介绍及使用含完整代码(值得珍藏)

    本文将详细阐述Spring Security的原理、使用方法以及步骤,并通过一个完整的示例来展示如何在Spring Boot项目中集成Spring Security。我们将从Spring Security的基本概念开始,逐步深入到配置和使用,确保读者能够...

    Spring Security3.0.1.RELEASE中文手册

    熟悉Spring-尤其是依赖注入原理-将帮助你更快的掌握Spring Security。 人们使用Spring Security有很多种原因, 不过通常吸引他们的是在J2EE Servlet规范或EJB规范中找不到典型企业应用场景的解决方案。 提到这些...

    Spring Security实现禁止用户重复登陆的配置原理

    主要介绍了Spring Security实现禁止用户重复登陆的配置原理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    Spring Security Remember me使用及原理详解

    主要介绍了Spring Security Remember me使用及原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    Spring Cloud Dalston+Spring security4.1+Spring Boot 2.0.0参考手资料合集

    熟悉Spring特别是一来注入原理两帮助你更快更方便的使用Spring Security。 Spring Boot是用来简化Spring应用初始搭建以及开发过程的全新框架,被认为是Spring MVC的“接班人”,和微服务紧密联系在一起。

    spring security的学习--11. 单点登录

    单点登录(Single Sign On , 简称 SSO )是目前比较流行的服务于企业业务整合的解决方案之一, SSO 使得在多个应用系统中,用户只...本文介绍了 CAS 的原理、协议、以及配合Spring-Security在 Tomcat 中的配置和使用。

    Spring攻略(第二版 中文高清版).part1

    第1章 Spring简介 1 1.1 实例化Spring IoC容器 1 1.1.1 问题 1 1.1.2 解决方案 1 1.1.3 工作原理 3 1.2 配置Spring IoC容器中的Bean 4 1.2.1 问题 4 1.2.2 解决方案 4 1.2.3 工作原理 4 1.3 调用...

    Spring攻略(第二版 中文高清版).part2

    第1章 Spring简介 1 1.1 实例化Spring IoC容器 1 1.1.1 问题 1 1.1.2 解决方案 1 1.1.3 工作原理 3 1.2 配置Spring IoC容器中的Bean 4 1.2.1 问题 4 1.2.2 解决方案 4 1.2.3 工作原理 4 1.3 调用...

    JavaEE开发的颠覆者SpringBoot实战[完整版].part3

    而Spring Boot 是Spring 主推的基于“习惯优于配置”的原则,让你能够快速搭建应用的框架,从而使得Java EE 开发变得异常简单。 《JavaEE开发的颠覆者: Spring Boot实战》从Spring 基础、Spring MVC 基础讲起,从而...

    JavaEE开发的颠覆者SpringBoot实战[完整版].part2

    而Spring Boot 是Spring 主推的基于“习惯优于配置”的原则,让你能够快速搭建应用的框架,从而使得Java EE 开发变得异常简单。 《JavaEE开发的颠覆者: Spring Boot实战》从Spring 基础、Spring MVC 基础讲起,从而...

    SSO单点登录Spring-Security+CAS+使用手册

    单点登录(Single Sign On , 简称 SSO )是目前比较流行的服务于企业业务整合的解决方案之一, SSO 使得在多个应用系统中,用户只...本文介绍了 CAS 的原理、协议、以及配合Spring-Security在 Tomcat 中的配置和使用。

    spring-boot-example:Spring Boot示例代码,附有博客文章,包含以下内容:配置讲解、日志、Druid、JPA、MyBatis、启动原理、数据校验、异常处理、定时任务、缓存、MQ、ElasticSearch、Spring Security、Shiro

    Springboot学习示例 博客文章链接 (15)Spring Boot2.0 和邮件 (16)Spring Boot2.0 整合Spring Security (17)Spring Boot2.0 整合Shiro (18)Spring Boot2.0 与监控管理

    全套spring cloud 项目

    这些项目是Spring将目前各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给我们开发者留出了一套简单易懂、易部署和易维护的分布式...

    JavaEE开发的颠覆者SpringBoot实战[完整版].part1

    而Spring Boot 是Spring 主推的基于“习惯优于配置”的原则,让你能够快速搭建应用的框架,从而使得Java EE 开发变得异常简单。 《JavaEE开发的颠覆者: Spring Boot实战》从Spring 基础、Spring MVC 基础讲起,从而...

    jasypt-1.9.3.jar

    Jasypt 这个Java类包为开发人员...&gt;Jasypt也可以与Acegi Security整合也即Spring Security。Jasypt亦拥有加密应用配置的集成功能,而且提供一个开放的API从而任何一个Java Cryptography Extension都可以使用Jasypt。

    springboot学习思维笔记.xmind

    Spring Security Spring HATEOAS Spring Social Spring AMQP Spring Mobile Spring for Android Spring Web Flow Spring Web Services Spring LDAP Spring ...

    jasypt API Docs 1.9 (CHM格式)

    Jasypt也可以与Acegi Security整合也即Spring Security。Jasypt亦拥有加密应用配置的集成功能,而且提供一个开放的API从而任何一个Java Cryptography Extension都可以使用Jasypt。 Jasypt还符合RSA标准的基于密码...

Global site tag (gtag.js) - Google Analytics