`

我的spring security配置demo文件

 
阅读更多

<?xml version="1.0" encoding="UTF-8"?>

 

<beans xmlns="http://www.springframework.org/schema/beans"

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xmlns:security="http://www.springframework.org/schema/security"

    xmlns:p="http://www.springframework.org/schema/p"

    xsi:schemaLocation="http://www.springframework.org/schema/beans 

                        http://www.springframework.org/schema/beans/spring-beans-2.5.xsd

                        http://www.springframework.org/schema/security 

                        http://www.springframework.org/schema/security/spring-security-2.0.4.xsd">

<import resource="datasourceSetting.xml"/>

<!--

        FilterChainProxy会按顺序来调用这些filter,使这些filter能享用Spring Ioc的功能,

        CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON 定义url比较前先转为小写

        PATTERN_TYPE_APACHE_ANT 定义使用Apache ant的匹配模式

     -->

<bean id="filterChainProxy"

class="org.springframework.security.util.FilterChainProxy">

<property name="filterInvocationDefinitionSource">

<value><![CDATA[

CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON

PATTERN_TYPE_APACHE_ANT

/**=concurrentSessionFilter,httpSessionContextIntegrationFilter,logoutFilter,authenticationProcessingFilter,securityContextHolderAwareRequestFilter,rememberMeProcessingFilter,anonymousProcessingFilter,exceptionTranslationFilter,filterSecurityInterceptor

]]></value>

</property>

</bean>

<!-- attention:forceEagerSessionCreation need to be true, if use remeberService -->

<bean id="httpSessionContextIntegrationFilter"

class="org.springframework.security.context.HttpSessionContextIntegrationFilter"

p:forceEagerSessionCreation="true"/>

<bean id="logoutFilter"

class="org.springframework.security.ui.logout.LogoutFilter">

<!-- 退出系统后系统跳转到此URL -->

<constructor-arg value="/index.jsp"/>

<!-- 退出系统后的操作(调用logout方法) -->

<constructor-arg>

<list>

<!-- 实现了LogoutHandler接口(logout方法) -->

<ref bean="rememberMeServices"/>

<bean class="org.springframework.security.ui.logout.SecurityContextLogoutHandler"/>

</list>

</constructor-arg>

</bean>

<!--

         处理表单认证filter:

         1.authenticationManager     认证管理器

         2.authenticationFailureUrl  定义登录失败时转向的页面

         3.defaultTargetUrl      定义登录成功时转向的页面

         4.filterProcessesUrl        定义登录请求的地址

         5.rememberMeServices        在验证成功后添加cookie信息

     -->

<bean id="authenticationProcessingFilter"

class="org.springframework.security.ui.webapp.AuthenticationProcessingFilter"

p:authenticationManager-ref="authenticationManager"

p:authenticationFailureUrl="/login.jsp?messcode=-1"

p:defaultTargetUrl="/index.jsp"

p:rememberMeServices-ref="rememberMeServices"

p:filterProcessesUrl="/spring_security_login"

/>

<!--

         通过Providers提供认证者列表,如果一个认证提供者失败可以尝试另外一个认证提供者,以保证获取不同来源的身份认证,如

         DaoAuthenticationProvider        从数据库中读取用户信息验证身份

         AnonymousAuthenticationProvider  匿名用户身份认证

         RememberMeAuthenticationProvider 已存cookie中的用户信息身份认证

         每个认证者会对自己指定的证明信息进行认证,如DaoAuthenticationProvider仅对UsernamePasswordAuthenticationToken这个证明信息进行认证。

     -->

<bean id="authenticationManager"

class="org.springframework.security.providers.ProviderManager"

p:sessionController-ref="concurrentSessionController">

<property name="providers">

<list>

<ref bean="daoAuthenticationProvider"/>

<bean

class="org.springframework.security.providers.anonymous.AnonymousAuthenticationProvider"

p:key="springsecurity"/>

<bean

class="org.springframework.security.providers.rememberme.RememberMeAuthenticationProvider"

p:key="springsecurity"/>

</list>

</property>

</bean>

    <bean id="daoAuthenticationProvider"

class="org.springframework.security.providers.dao.DaoAuthenticationProvider"

p:userCache-ref="userCache"

p:passwordEncoder-ref="passwordEncoder"

p:saltSource-ref="saltSource"

p:userDetailsService-ref="userDetailsService"/>

<!-- 使用动态盐值MD5的方式加密解密 -->

<bean id="passwordEncoder"

class="org.springframework.security.providers.encoding.Md5PasswordEncoder"/>

    <bean id="saltSource" class="org.springframework.security.providers.dao.salt.ReflectionSaltSource">   

       <property name="userPropertyToUse" value="getUsername" />   

    </bean>   

<!-- 自定义UserDetailsService实现 -->

<bean id="userDetailsService"

class="security.authentication.MySecurityJdbcDaoImpl"

p:dataSource-ref="dataSource"

p:usersByUsernameQuery="select userName, passWord, enabled, userId, email from users where userName=?"

p:authoritiesByUsernameQuery="select u.userName,r.roleName  from users u,roles r,users_roles ur where u.userId=ur.userId and r.roleId=ur.roleId and u.userName=?"/>

<!-- 阻止用户在成功登录之后再进行一次成功登录 

    exceptionIfMaximumExceeded: false, it means: the later login user will kick off the

    previous login user, the previous user cannot use again

-->

<bean id="concurrentSessionController"

class="org.springframework.security.concurrent.ConcurrentSessionControllerImpl"

p:maximumSessions="1"

p:exceptionIfMaximumExceeded="false"

p:sessionRegistry-ref="sessionRegistry"

p:messageSource-ref="messageSource"/>

<bean id="sessionRegistry"

class="org.springframework.security.concurrent.SessionRegistryImpl"/>

<bean id="concurrentSessionFilter" class="org.springframework.security.concurrent.ConcurrentSessionFilter">  

        <property name="sessionRegistry" ref="sessionRegistry"/>  

        <property name="expiredUrl" value="/login.jsp?messcode=-2"/>  

    </bean>  

<bean id="messageSource"

class="org.springframework.context.support.ReloadableResourceBundleMessageSource"

p:basename="/WEB-INF/classes/messages_zh_CN"/>

 

<bean id="securityContextHolderAwareRequestFilter"

class="org.springframework.security.wrapper.SecurityContextHolderAwareRequestFilter"/>

<!--

利用cookie自动登陆filter

         当SecurityContextHolder中不存在Authentication.用户授权信息,

         rememberMeProcessingFilter就会调用autoLogin()方法从cookie中获取用户信息,在验证filter之前使用

     -->

<bean id="rememberMeProcessingFilter"

class="org.springframework.security.ui.rememberme.RememberMeProcessingFilter"

p:authenticationManager-ref="authenticationManager"

p:rememberMeServices-ref="rememberMeServices"/>

<!--

         如果不存在任何授权信息时,自动添加匿名用户身份至SecurityContextHolder中

-->

<bean id="anonymousProcessingFilter"

class="org.springframework.security.providers.anonymous.AnonymousProcessingFilter"

p:key="springsecurity"

p:userAttribute="anonymousUser,ROLE_ANONYMOUS"/>

<!--

    异常处理filter(异常转换过滤器),主要是处理AccessDeniedException和AuthenticationException,

    将给每个异常找到合适的"去向"

-->

<bean id="exceptionTranslationFilter"

class="org.springframework.security.ui.ExceptionTranslationFilter"

p:accessDeniedHandler-ref="accessDeniedHandler"

p:authenticationEntryPoint-ref="authenticationEntryPoint"/>

<!-- 处理AccessDeniedException -->

<bean id="accessDeniedHandler"

class="org.springframework.security.ui.AccessDeniedHandlerImpl"

p:errorPage="/accessDenied.jsp"/>

<!--  -->

<bean id="authenticationEntryPoint"

class="org.springframework.security.ui.webapp.AuthenticationProcessingFilterEntryPoint"

p:loginFormUrl="/login.jsp"

p:forceHttps="false"/>

 

<!--

使用过滤器安全拦截器保护资源

          filterSecurityInterceptor在执行转向目标url前检查objectDefinitionSource中设定的用户权限信息,

           安全强制过滤器负责拦截请求,判断请求是否安全,并且给予认证和访问决策管理器一个机会来验证用户的身份和权限

           过程:

              首先,过滤器安全拦截器使用authenticationManager调用自己的provider来对用户的认证信息进行验证并获取用户已有的权限。

              然后,使用访问决策管理器来判断用户是否拥用合适的授权来访问受保护的资源。

               (objectDefinitionSource属性定义了访问URL需要的权限信息)

              最后,有投票者根据用户持有认证和访问url需要的属性,调用自己的voter来投票,决定是否允许访问。

     -->

<bean id="filterSecurityInterceptor"

class="org.springframework.security.intercept.web.FilterSecurityInterceptor"

p:authenticationManager-ref="authenticationManager"

p:accessDecisionManager-ref="accessDecisionManager"

p:objectDefinitionSource-ref="objectDefinitionSource">

<!--

<property name="objectDefinitionSource">

<value><![CDATA[

CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON

PATTERN_TYPE_APACHE_ANT

/admins/**=ROLE_SUPERVISOR

/user/**=ROLE_USER,IS_AUTHENTICATED_REMEMBERED

/default.jsp=ROLE_USER,IS_AUTHENTICATED_REMEMBERED

/**=IS_AUTHENTICATED_ANONYMOUSLY

]]></value>

</property>

-->

</bean>

<bean id="objectDefinitionSource"

class="security.resource.DataBaseFilterInvocationDefinitionSource"

p:convertUrlToLowercaseBeforeComprison="true"

p:useAntPath="true"

p:resourceLoader-ref="resourceLoader"/>

<bean id="resourceLoader" class="security.resource.ResourceLoader">

<property name="syscode">

   <value>00000001</value>

</property>

<property name="cache">

<bean class="security.cache.EHCacheImpl">

<constructor-arg>

<bean class="org.springframework.cache.ehcache.EhCacheFactoryBean"

 p:cacheManager-ref="cacheManager"

 p:cacheName="security.resourceCache"/>

</constructor-arg>

</bean>

</property>

</bean>

<!--

访问决策管理器

  验证用户是否有权限访问相应的资源(filterSecurityInterceptor中objectDefinitionSource属性定义的访问URL需要的属性信息)

-->

<bean id="accessDecisionManager"

class="org.springframework.security.vote.AffirmativeBased"

p:allowIfAllAbstainDecisions="false">

<property name="decisionVoters">

<list>

<bean class="security.voter.RoleVoterEx"/>

<bean class="org.springframework.security.vote.AuthenticatedVoter"/>

</list>

</property>

</bean>

 

<bean id="rememberMeServices"

class="org.springframework.security.ui.rememberme.TokenBasedRememberMeServices"

p:key="springsecurity"

p:userDetailsService-ref="userDetailsService"/>

<!-- 缓存配置 -->

<bean id="userCache"

class="org.springframework.security.providers.dao.cache.EhCacheBasedUserCache">

<property name="cache">

<bean class="org.springframework.cache.ehcache.EhCacheFactoryBean"

p:cacheManager-ref="cacheManager"

p:cacheName="security.userCache"/>

</property>

</bean>

<bean id="cacheManager"

class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean"

p:configLocation="classpath:bean/ehcache.xml">

</bean>

 

<!-- ========== 保护方法 ========== -->

<bean id="myInterceper"

class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">

<property name="interceptorNames">

<list>

<value>methodInvocationIntercept</value>

</list>

</property>

<property name="beanNames">

<list>

<value>newsService</value>

</list>

</property>

</bean>

<bean id="methodInvocationIntercept"

class="org.springframework.security.intercept.method.aopalliance.MethodSecurityInterceptor"

p:authenticationManager-ref="authenticationManager"

p:accessDecisionManager-ref="accessDecisionManager"

p:objectDefinitionSource-ref="methodDefinitionSource">

<!--

<property name="objectDefinitionSource">

<value>

com.test.service.NewsService.get*=ROLE_SUPERVISOR

</value>

</property>

-->

</bean>

<bean id="methodDefinitionSource"

class="security.resource.DataBaseMethodInvocationDefinitionSource"

p:resourceLoader-ref="resourceLoader"/>

<!-- ========== 保护方法 ========== -->

 

<bean id="loggerListener"

 class="org.springframework.security.event.authentication.LoggerListener"/>

 

</beans>


分享到:
评论

相关推荐

    Spring Security3 Demo

    在"SpringSecurity2Demo"这个项目中,我们可以预期看到以下组成部分: 1. **配置文件**: `spring-security.xml`,这是Spring Security的核心配置文件,包含了过滤器链的配置、用户认证源、授权规则等。 2. **控制...

    SpringSecurity入门Demo实例

    在这个入门Demo实例中,我们将探讨如何配置和使用Spring Security来保护我们的Java应用。教程链接提及的CSDN博客文章提供了详细的步骤,指导我们逐步创建一个基本的Spring Security应用。 首先,我们需要在项目中...

    springsecurity使用demo

    在 `springsecurity-demo` 文件中,你可能会看到以下内容: - `SecurityConfig.java`:这是 Spring Security 的配置类,包含了对 `HttpSecurity` 的配置。 - `UserDetailsService` 实现类:用于加载用户信息,通常...

    01-SpringSecurity-Demo.zip

    本压缩包"01-SpringSecurity-Demo.zip"包含了SpringSecurity学习的配套代码示例,可以辅助理解并实践SpringSecurity的核心概念。 首先,SpringSecurity的基础架构包括以下几个核心组件: 1. **Filter Chain**: 这...

    Spring Security简单Demo

    **Spring Security简介** Spring Security是Java领域中一个强大的安全框架,用于处理Web应用程序的安全性问题。它提供了一套全面的解决方案,包括身份验证、授权、会话管理以及防止常见的攻击,如跨站脚本(XSS)、...

    spring security3.0 demo

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

    springboot+springSecurity的Demo实例

    通过这个Demo,开发者可以学习如何在SpringBoot项目中整合SpringSecurity,理解安全配置的原理,以及如何处理登录、权限控制等常见的安全问题。对于初学者来说,这是一个很好的实践起点,能够帮助他们快速掌握这两个...

    Spring Security3 简单demo

    在压缩包文件"SpringSecurity3"中,可能包含了以下内容: - `spring-security.xml`:这是主要的配置文件,包含了上述提到的所有配置。 - `web.xml`:可能包含了Spring Security过滤器链的配置,以便在Web应用启动时...

    spring security 入门demo

    在这个"Spring Security 入门demo"中,我们将会探讨一系列关键概念和功能,通过提供的压缩包文件,我们可以看到不同方面的实现示例。 1. **Spring Security RESTful服务**: - `spring-security-rest-full` 模块...

    spring security demo2

    在"spring security demo2"项目中,我们很显然会深入探索如何在实际应用中配置和使用Spring Security来确保Web应用程序的安全性。让我们详细讨论Spring Security的核心概念、配置以及它在实践中的应用。 1. **核心...

    springsecurity使用配置详解

    在提供的压缩包`springsecurity配置demo`中,你将找到示例代码和详细说明,这将帮助你更好地理解和实践上述概念。通过学习和实践这些示例,你将能够为自己的Spring应用程序构建强大的安全防护。

    springMvc+mybatis+springSecurity整合demo

    在配置 Spring Security 时,我们通常会定义安全配置类,设置过滤器链,以及配置权限控制规则。 整合这三大框架,我们需要以下步骤: 1. 引入依赖:在项目的 pom.xml 文件中添加 Spring MVC、MyBatis 和 Spring ...

    SpringSecurity入门小demo(SSM+Spring Security)

    在 `HelloSpringSecurity` 文件中,你可能看到以下关键代码: - **WebSecurityConfigurerAdapter** 类:这是 Spring Security 提供的配置适配器,可以覆盖其方法来定制安全规则。 - `configure(HttpSecurity http)...

    SpringSecurity安全框架基础Demo

    这个"SpringSecurity安全框架基础Demo"旨在帮助开发者快速理解和实践Spring Security的核心功能。 **1. 用户认证** 在Spring Security中,用户认证主要由Authentication对象负责。当用户尝试访问受保护的资源时,...

    spring-security简单demo

    这个"spring-security简单demo"应该是为了帮助开发者理解如何在Spring Boot应用中集成和配置Spring Security的基本功能。下面,我们将深入探讨Spring Security的核心概念和在这个示例中可能涉及到的关键点。 1. **...

    spring security3.1的demo

    配置Spring Security通常通过XML配置文件完成。在3.1版本中,我们可以使用`&lt;http&gt;`、`&lt;authentication-manager&gt;`和`&lt;access-decision-manager&gt;`等元素来定义安全策略。这些元素帮助我们设置URL拦截规则、认证机制和...

    spring-boot spring-security-oauth2 完整demo

    总的来说,这个“spring-boot spring-security-oauth2 完整demo”为学习和实践Spring Boot、Spring Security与OAuth2的结合提供了宝贵的参考。通过深入理解和实践这个示例,开发者不仅可以掌握这三大框架的基本用法...

    spring-security demo

    这个"spring-security demo"是一个示例项目,旨在帮助开发者理解和实践Spring Security的基本概念和配置。在这个项目中,我们可以深入学习如何使用Spring Security来实现用户认证、权限控制以及安全相关的功能。 ...

    springSecurity demo 下载可用

    这个"springSecurity demo"项目很可能是为了演示如何将这些概念应用到实际的SSM项目中,帮助开发者快速理解和实践Spring Security的配置和使用。通过下载和研究这个示例,可以加深对Spring Security在SSM环境下的...

    Spring_Security入门demo(maven项目)

    在这个"Spring_Security入门demo(maven项目)"中,我们将探讨如何搭建一个基本的Spring Security环境,理解其核心概念,并通过实际操作来熟悉它的配置和功能。 **1. Maven项目介绍** Maven 是一个项目管理和综合...

Global site tag (gtag.js) - Google Analytics