`
wang4674890
  • 浏览: 89393 次
  • 性别: Icon_minigender_2
  • 来自: 厦门
社区版块
存档分类
最新评论

Spring Security 基于数据库的权限管理配置

    博客分类:
  • java
 
阅读更多
目前在做一个原型系统,其中涉及到权限管理部分,研究了一下Spring Security,由于网上资料都是在配置文件里面定义url权限的,基本上没有存在数据库中的。在这个过程中我在网上找了很多资料,但是没有一个是完全能够解决问题的,acegi的例子springside倒是有一个。 而下面这段是一位网上朋友提供的,还不错,解析的清楚,大家可以参考
applicationContext-security.xml文件如下:
01.<?xml version="1.0" encoding="UTF-8"?>   
 02.<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
 03.       xmlns:p="http://www.springframework.org/schema/p"  
 04.       xmlns:security="http://www.springframework.org/schema/security"  
 05.       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd   
 06.        http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-2.0.2.xsd">   
 07.  
 08.    <!--   
 09.            FilterChainProxy会按顺序来调用这些filter,使这些filter能享用Spring Ioc的功能,   
 10.            CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON 定义url比较前先转为小写   
 11.            PATTERN_TYPE_APACHE_ANT 定义使用Apache ant的匹配模式   
 12.         -->   
 13.    <bean id="springSecurityFilterChain"  
 14.          class="org.springframework.security.util.FilterChainProxy">   
 15.        <property name="filterInvocationDefinitionSource">   
 16.            <value><![CDATA[   
 17.                    CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON   
 18.                    PATTERN_TYPE_APACHE_ANT   
 19.                    /**=httpSessionContextIntegrationFilter,logoutFilter,authenticationProcessingFilter,securityContextHolderAwareRequestFilter,rememberMeProcessingFilter,anonymousProcessingFilter,exceptionTranslationFilter,filterSecurityInterceptor   
 20.                ]]></value>   
 21.        </property>   
 22.    </bean>   
 23.    <!--   
 24.        集成过滤器(HttpSessionContextIntegrationFilter是集成过滤器的一个实现)   
 25.           每次request前HttpSessionContextIntegrationFilter从Session中获取Authentication对象,在request完后   
 26.           又把Authentication对象保存到Session中供下次request使用,此filter必须在其他Acegi filter前使用   
 27.    -->   
 28.    <bean id="httpSessionContextIntegrationFilter"  
 29.          class="org.springframework.security.context.HttpSessionContextIntegrationFilter"/>   
 30.    <!--   
 31.        退出(Logout)过滤器 退出登录操作   
 32.    -->   
 33.    <bean id="logoutFilter"  
 34.          class="org.springframework.security.ui.logout.LogoutFilter">   
 35.        <!-- 退出系统后系统跳转到此URL -->   
 36.        <constructor-arg value="/login.action"/>   
 37.        <!-- 退出系统后的操作(调用logout方法) -->   
 38.        <constructor-arg>   
 39.            <list>   
 40.                <!-- 实现了LogoutHandler接口(logout方法) -->   
 41.                <ref bean="rememberMeServices"/>   
 42.                <bean class="org.springframework.security.ui.logout.SecurityContextLogoutHandler"/>   
 43.            </list>   
 44.        </constructor-arg>   
 45.    </bean>   
 46.    <!--   
 47.        处理表单认证filter:   
 48.        1.authenticationManager     认证管理器   
 49.        2.authenticationFailureUrl  定义登录失败时转向的页面   
 50.        3.defaultTargetUrl        定义登录成功时转向的页面   
 51.        4.filterProcessesUrl        定义登录请求的地址   
 52.        5.rememberMeServices        在验证成功后添加cookie信息   
 53.    -->   
 54.    <bean id="authenticationProcessingFilter"  
 55.          class="org.springframework.security.ui.webapp.AuthenticationProcessingFilter"  
 56.          p:authenticationManager-ref="authenticationManager"  
 57.          p:authenticationFailureUrl="/login.action?login_error=1"  
 58.          p:defaultTargetUrl="/user.action"  
 59.          p:filterProcessesUrl="/j_spring_security_check"  
 60.          p:rememberMeServices-ref="rememberMeServices"/>   
 61.    <!--   
 62.        认证管理器(org.springframework.security.AuthenticationManager接口)   
 63.         org.springframework.security.providers.ProviderManager是认证管理器的一个实现,   
 64.         ProviderManager通过遍历一个提供者的集合来实现身份验证,   
 65.         直到某一个认证提供者能够成功地验证该用户的身份   
 66.    -->   
 67.    <!--   
 68.        通过Providers提供认证者列表,如果一个认证提供者失败可以尝试另外一个认证提供者,以保证获取不同来源的身份认证,如   
 69.        DaoAuthenticationProvider        从数据库中读取用户信息验证身份   
 70.        AnonymousAuthenticationProvider  匿名用户身份认证   
 71.        RememberMeAuthenticationProvider 已存cookie中的用户信息身份认证   
 72.  
 73.        其它的还有   
 74.        AuthByAdapterProvider           使用容器的适配器验证身份   
 75.        CasAuthenticationProvider       根据Yale中心认证服务验证身份, 用于实现单点登陆   
 76.        JaasAuthenticationProvider      从JASS登陆配置中获取用户信息验证身份   
 77.        RemoteAuthenticationProvider    根据远程服务验证用户身份   
 78.        RunAsImplAuthenticationProvider 对身份已被管理器替换的用户进行验证   
 79.        X509AuthenticationProvider      从X509认证中获取用户信息验证身份   
 80.        TestingAuthenticationProvider   单元测试时使用   
 81.  
 82.        每个认证者会对自己指定的证明信息进行认证,如DaoAuthenticationProvider仅对UsernamePasswordAuthenticationToken这个证明信息进行认证。   
 83.    -->   
 84.    <bean id="authenticationManager"  
 85.          class="org.springframework.security.providers.ProviderManager"  
 86.          p:sessionController-ref="concurrentSessionController">   
 87.        <property name="providers">   
 88.            <list>   
 89.                <ref bean="daoAuthenticationProvider"/>   
 90.                <bean   
 91.                        class="org.springframework.security.providers.anonymous.AnonymousAuthenticationProvider"  
 92.                        p:key="springsecurity"/>   
 93.                <bean   
 94.                        class="org.springframework.security.providers.rememberme.RememberMeAuthenticationProvider"  
 95.                        p:key="springsecurity"/>   
 96.            </list>   
 97.        </property>   
 98.    </bean>   
 99.    <!-- 阻止用户在成功登录之后再进行一次成功登录 -->   
 100.    <bean id="concurrentSessionController"  
 101.          class="org.springframework.security.concurrent.ConcurrentSessionControllerImpl"  
 102.          p:maximumSessions="1"  
 103.          p:exceptionIfMaximumExceeded="true"  
 104.          p:sessionRegistry-ref="sessionRegistry"  
 105.          p:messageSource-ref="messageSource"/>   
 106.  
 107.    <bean id="sessionRegistry"  
 108.          class="org.springframework.security.concurrent.SessionRegistryImpl"/>   
 109.  
 110.    <bean id="messageSource"  
 111.          class="org.springframework.context.support.ReloadableResourceBundleMessageSource"  
 112.          p:basename="/WEB-INF/classes/messages_zh_CN"/>   
 113.  
 114.    <bean id="securityContextHolderAwareRequestFilter"  
 115.          class="org.springframework.security.wrapper.SecurityContextHolderAwareRequestFilter"/>   
 116.    <!--   
 117.       利用cookie自动登陆filter   
 118.        当SecurityContextHolder中不存在Authentication.用户授权信息,   
 119.        rememberMeProcessingFilter就会调用autoLogin()方法从cookie中获取用户信息,在验证filter之前使用   
 120.    -->   
 121.    <bean id="rememberMeProcessingFilter"  
 122.          class="org.springframework.security.ui.rememberme.RememberMeProcessingFilter"  
 123.          p:authenticationManager-ref="authenticationManager"  
 124.          p:rememberMeServices-ref="rememberMeServices"/>   
 125.    <!--   
 126.        如果不存在任何授权信息时,自动添加匿名用户身份至SecurityContextHolder中   
 127.    -->   
 128.    <bean id="anonymousProcessingFilter"  
 129.          class="org.springframework.security.providers.anonymous.AnonymousProcessingFilter"  
 130.          p:key="springsecurity"  
 131.          p:userAttribute="anonymousUser,ROLE_ANONYMOUS"/>   
 132.    <!--   
 133.       异常处理filter(异常转换过滤器),主要是处理AccessDeniedException和AuthenticationException,   
 134.        将给每个异常找到合适的"去向"  
 135.    -->   
 136.    <bean id="exceptionTranslationFilter"  
 137.          class="org.springframework.security.ui.ExceptionTranslationFilter"  
 138.          p:accessDeniedHandler-ref="accessDeniedHandler"  
 139.          p:authenticationEntryPoint-ref="authenticationEntryPoint"/>   
 140.  
 141.    <!-- 处理AccessDeniedException -->   
 142.    <bean id="accessDeniedHandler"  
 143.          class="org.springframework.security.ui.AccessDeniedHandlerImpl"  
 144.          p:errorPage="/accessDenied.jsp"/>   
 145.    <!--  -->   
 146.    <bean id="authenticationEntryPoint"  
 147.          class="org.springframework.security.ui.webapp.AuthenticationProcessingFilterEntryPoint"  
 148.          p:loginFormUrl="/login.action"  
 149.          p:forceHttps="false"/>   
 150.  
 151.    <!--   
 152.         使用过滤器安全拦截器保护资源   
 153.         filterSecurityInterceptor在执行转向目标url前检查objectDefinitionSource中设定的用户权限信息,   
 154.          安全强制过滤器负责拦截请求,判断请求是否安全,并且给予认证和访问决策管理器一个机会来验证用户的身份和权限   
 155.          过程:   
 156.             首先,过滤器安全拦截器使用authenticationManager调用自己的provider来对用户的认证信息进行验证并获取用户已有的权限。   
 157.             然后,使用访问决策管理器来判断用户是否拥用合适的授权来访问受保护的资源。   
 158.              (objectDefinitionSource属性定义了访问URL需要的权限信息)   
 159.             最后,有投票者根据用户持有认证和访问url需要的属性,调用自己的voter来投票,决定是否允许访问。   
 160.    -->   
 161.    <bean id="filterSecurityInterceptor"  
 162.          class="org.springframework.security.intercept.web.FilterSecurityInterceptor"  
 163.          p:authenticationManager-ref="authenticationManager"  
 164.          p:accessDecisionManager-ref="accessDecisionManager"  
 165.          p:objectDefinitionSource-ref="objectDefinitionSource">   
 166.    </bean>   
 167.    <bean id="objectDefinitionSource"  
 168.          class="com.shopin.modules.security.intercept.web.DataBaseFilterInvocationDefinitionSource"  
 169.          p:convertUrlToLowercaseBeforeComprison="true"  
 170.          p:useAntPath="true"  
 171.          p:cacheManager-ref="securityCacheManager"/>   
 172.    <!--   
 173.         访问决策管理器   
 174.           验证用户是否有权限访问相应的资源(filterSecurityInterceptor中objectDefinitionSource属性定义的访问URL需要的属性信息)   
 175.    -->   
 176.    <bean id="accessDecisionManager"  
 177.          class="org.springframework.security.vote.AffirmativeBased"  
 178.          p:allowIfAllAbstainDecisions="false">   
 179.        <property name="decisionVoters">   
 180.            <list>   
 181.                <bean class="org.springframework.security.vote.RoleVoter"/>   
 182.                <bean class="org.springframework.security.vote.AuthenticatedVoter"/>   
 183.            </list>   
 184.        </property>   
 185.    </bean>   
 186.  
 187.    <bean id="rememberMeServices"  
 188.          class="org.springframework.security.ui.rememberme.TokenBasedRememberMeServices"  
 189.          p:key="springsecurity"  
 190.          p:userDetailsService-ref="userDetailsService"/>   
 191.  
 192.    <bean id="daoAuthenticationProvider"  
 193.          class="org.springframework.security.providers.dao.DaoAuthenticationProvider"  
 194.          p:userCache-ref="userCache"  
 195.          p:passwordEncoder-ref="passwordEncoder"  
 196.          p:userDetailsService-ref="userDetailsService"/>   
 197.    <bean id="passwordEncoder"  
 198.          class="org.springframework.security.providers.encoding.Md5PasswordEncoder"/>   
 199.  
 200.    <!-- 缓存配置 -->   
 201.    <bean id="resourceCache"  
 202.          class="com.shopin.modules.security.resourcedetails.EhCacheResourceCache">   
 203.        <property name="cache">   
 204.            <bean class="org.springframework.cache.ehcache.EhCacheFactoryBean"  
 205.                  p:cacheManager-ref="cacheManager"  
 206.                  p:cacheName="resourceCache"/>   
 207.        </property>   
 208.    </bean>   
 209.    <bean id="userCache"  
 210.          class="org.springframework.security.providers.dao.cache.EhCacheBasedUserCache">   
 211.        <property name="cache">   
 212.            <bean class="org.springframework.cache.ehcache.EhCacheFactoryBean"  
 213.                  p:cacheManager-ref="cacheManager"  
 214.                  p:cacheName="userCache"/>   
 215.        </property>   
 216.    </bean>   
 217.    <bean id="cacheManager"  
 218.          class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean"  
 219.          p:configLocation="classpath:ehcache-hibernate.xml">   
 220.    </bean>   
 221.  
 222.    <bean id="userDetailsService" class="cn.shopin.miniweb.service.security.UserDetailServiceImpl"/>   
 223.  
 224.    <bean id="securityCacheManager"  
 225.          class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"  
 226.          p:transactionManager-ref="transactionManager"  
 227.          p:proxyTargetClass="true">   
 228.        <property name="target">   
 229.            <bean class="com.shopin.modules.security.cache.SecurityCacheManagerImpl"  
 230.                  p:sessionFactory-ref="sessionFactory"  
 231.                  p:resourcCache-ref="resourceCache"/>   
 232.        </property>   
 233.        <property name="transactionAttributes">   
 234.            <props>   
 235.                <prop key="init*">PROPAGATION_REQUIRED,readOnly</prop>   
 236.                <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>   
 237.            </props>   
 238.        </property>   
 239.    </bean>   
 240.  
 241.    <bean id="loggerListener"  
 242.          class="org.springframework.security.event.authentication.LoggerListener"/>   
 243.  
 244.</beans>  

分享到:
评论

相关推荐

    SpringSecurity 2 权限基于数据库--完整DEMO(带数据库文件)

    本DEMO展示了如何将SpringSecurity与SSH(Spring、Struts2、Hibernate)集成,实现基于数据库的权限管理。在这个完整的示例中,我们将探讨以下几个关键知识点: 1. **SpringSecurity配置**: - SpringSecurity的...

    spring security与数据库交互实现简单例子

    总的来说,这个例子展示了如何使用Spring Security与数据库配合,实现用户认证和基于角色的授权。通过调整配置和数据库结构,你可以根据具体需求扩展和定制这个基础框架,实现更复杂的安全策略。

    spring security 使用数据库管理资源

    标题 "spring security 使用数据库管理资源" 指的是在Spring Security框架中,通过数据库来存储和管理权限与资源的相关配置。这一做法使得安全控制更为灵活,可以动态地更新和扩展系统的访问控制。Spring Security是...

    Spring Security 把授权信息写入数据库

    在处理与数据库交互方面,Spring Security提供了更强大的支持,包括长期的remember-me功能和基于数据库的角色与用户管理API。 24.2. 目标 在原有应用中,用户信息和资源访问控制已经在数据库中管理。目标是将现有...

    Spring Security基于数据库实现认证过程解析

    在Spring Security中,需要配置认证机制以便于基于数据库的认证。这里,我们将使用Spring Security的AuthenticationProvider机制来实现认证。 首先,我们需要配置AuthenticationProvider,例如: ```java @...

    SpringBoot集成Spring Security实现权限控制【完整源码+数据库】

    Spring Security是一个全面的、高度可配置的安全框架,它涵盖了认证、授权以及会话管理等多个方面,而SpringBoot则简化了Spring的配置过程,使得搭建和运行应用程序更加便捷。本项目提供的完整源码和数据库将帮助...

    spring security实现动态授权

    总的来说,Spring Security的动态授权功能使得权限管理变得更加灵活和高效。通过对源代码的适当修改,我们可以构建一个完全可配置的权限管理系统,适应不断变化的业务需求。这个过程涉及多个组件的定制,但一旦设置...

    spring security自定义数据库小项目

    在 Spring Security 的配置类中,你需要定义认证和授权的规则。例如,使用 `httpSecurity` 配置对象设置登录页面、访问控制、CSRF 防护等。同时,通过 `authenticationManager` 和 `accessDecisionManager` 注入...

    SpringSecurity-数据库认证-简单授权

    SpringSecurity是Java开发中一个强大的安全框架,它主要用于实现应用层面的安全控制,包括用户认证、权限授权等。在这个“SpringSecurity-数据库认证-简单授权”的主题中,我们将深入探讨如何结合SpringSecurity与...

    spring security 读取数据库权限信息

    项目自身的权限信息结合spring security 框架的实现。 本DEMO只包括从数据库读取登录认证信息,认证通过后 从数据库读取授权信息来控制用户的访问.权限元素包括 用户,角色,菜单以及这三者的关系。 本DEMO使用了...

    基本的spring mvc + spring security实现的登录(无数据库)

    Spring MVC是Spring框架的一部分,用于处理Web应用程序的请求-响应模型,而Spring Security则是一个强大的安全管理框架,提供了认证和授权功能,帮助开发者保护应用免受恶意攻击。 1. **Spring MVC**: - **核心...

    spring security用数据库的示例

    在"spring security用数据库的示例"中,我们将深入探讨如何配置Spring Security以使用数据库进行用户管理和权限控制。 首先,Spring Security的核心组件包括Authentication(认证)和Authorization(授权)。认证是...

    springboot springsecurity动态权限控制

    在这个“springboot springsecurity动态权限控制”的主题中,我们将深入探讨如何在Spring Boot项目中集成Spring Security,实现动态权限控制,让菜单权限的管理更加灵活和高效。 首先,我们需要理解Spring Security...

    Spring security认证授权

    它提供了全面的安全解决方案,包括用户认证、权限授权、会话管理、CSRF防护以及基于HTTP的访问控制。在这个例子中,我们将深入探讨如何使用Spring Security进行认证和授权,并结合数据库操作进行动态配置。 首先,...

    spring boot 基于数据库整合OAuth2

    本教程将深入探讨如何在Spring Boot项目中集成OAuth2,并基于数据库存储相关配置,确保系统的安全性和可扩展性。 首先,OAuth2的核心概念包括四个角色:资源所有者(Resource Owner)、客户端(Client)、授权...

    spring security权限管理

    总的来说,理解并掌握Spring Security的权限管理机制,需要对`UserDetails`接口、配置文件的解析以及数据库交互有深入的认识。通过自定义用户实体、配置安全规则以及实现数据访问层,我们可以构建出满足业务需求的...

    Spring Security in Action

    Spring Security 是一个基于 Java 的安全框架,旨在提供身份验证、授权和访问控制等功能。下面是 Spring Security 的主要知识点: 一、身份验证(Authentication) 身份验证是指对用户身份的验证,以确保用户的...

    spring-security使用数据库用户认证

    在Spring Security中,我们需要在配置类中启用Web安全配置,并定义认证和授权规则。首先,我们需要引入Spring Security的依赖,并创建一个扩展自`WebSecurityConfigurerAdapter`的配置类。在这里,我们可以配置`...

    SpringSecurity权限管理

    你将找到更多关于如何配置和使用SpringSecurity进行权限管理的详细信息,包括配置XML或Java配置、定义访问规则、处理未授权和未认证的异常、自定义权限表达式等。 至于"springsecurity-sample",这可能是一个示例...

Global site tag (gtag.js) - Google Analytics