- 浏览: 89393 次
- 性别:
- 来自: 厦门
最新评论
-
zhengyong7232:
SELECT t.province,DECODE(landsc ...
列转行 -
meepo3927:
不是特么很懂
列转行
目前在做一个原型系统,其中涉及到权限管理部分,研究了一下Spring Security,由于网上资料都是在配置文件里面定义url权限的,基本上没有存在数据库中的。在这个过程中我在网上找了很多资料,但是没有一个是完全能够解决问题的,acegi的例子springside倒是有一个。 而下面这段是一位网上朋友提供的,还不错,解析的清楚,大家可以参考
applicationContext-security.xml文件如下:
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>
发表评论
-
最小生成树之Kruskal算法
2013-12-15 00:54 1092这篇文章实现最小生成树的Kruskal算法Kruskal算 ... -
排序算法--插入排序
2013-12-15 00:47 1068插入排序原理:假设 ... -
poi创建下拉框
2013-04-16 19:01 0package finance.tools.salesper ... -
Spring中Transactional配置
2013-04-11 20:43 1007Spring中Transactional配置 标签: 杂谈 分 ... -
Hibernate将Enum枚举类型映射为Int类型 .
2013-04-09 16:46 1542最近要用Hibernate做一个枚举类型的映射,在MySQL ... -
Hibernate 更灵活的用法 HibernateCallback
2013-01-22 14:41 1439在项目中用Hibernate的DetachedCriter ... -
spring源代码分析(2)--BeanFactory
2013-01-20 12:38 1436我们首先来看下BeanFacroty接口 pa ... -
spring源代码分析(1)--Resource的分析
2013-01-20 12:22 4050我们知道,在spring中,配置文件是通过资源形式加载的, ... -
DefaultListableBeanFactory研究
2013-01-18 10:49 5914DefaultSingletonBeanRegistry完 ... -
jvm的内存调优
2013-01-11 15:54 8681) 堆 运行时数 ... -
struts2中Action的name 和package的name和namespace是什么作用
2013-01-02 12:16 9642在struts2的 struts.xml 配置中 例: ... -
深入探索 高效的Java异常处理框架
2012-10-22 14:09 917摘要:本文从Java异常最基本的概念、语法开始讲述了Java异 ... -
JAVA对ArrayList排序
2012-10-16 21:53 16544java如何对ArrayList中对象按照该对象某属性排序 ... -
ThreadPoolExecutor使用和思考(中)-keepAliveTime及拒绝策略
2012-09-11 00:48 963工作中多处接触到了ThreadPoolExecutor。趁着现 ... -
ThreadPoolExecutor使用和思考(上)-线程池大小设置与BlockingQueue的三种实现区别
2012-09-11 00:45 1659工作中多处接触到了ThreadPoolExecutor。趁着现 ... -
Spring IOC之BeanFactory
2012-09-10 12:39 1319BeanFactory ,作为 Spring 基础的 IoC ... -
Java5 并发学习
2012-09-10 11:33 826在Java5之后 ... -
Spring对事务管理的支持的发展历程(基础篇
2012-08-31 17:43 944Connection conn = DataS ... -
CXF ,在Client端用于把 Date 类型转换成 XMLGregorianCalendar .
2012-08-31 16:54 1665import javax.xml.datatype.Datat ... -
《Spring技术内幕》学习笔记10——Web环境中Spring的启动过程
2012-07-30 09:04 10091.Spring 不但可以在 JavaSE 环境中应用,在 W ...
相关推荐
本DEMO展示了如何将SpringSecurity与SSH(Spring、Struts2、Hibernate)集成,实现基于数据库的权限管理。在这个完整的示例中,我们将探讨以下几个关键知识点: 1. **SpringSecurity配置**: - SpringSecurity的...
总的来说,这个例子展示了如何使用Spring Security与数据库配合,实现用户认证和基于角色的授权。通过调整配置和数据库结构,你可以根据具体需求扩展和定制这个基础框架,实现更复杂的安全策略。
标题 "spring security 使用数据库管理资源" 指的是在Spring Security框架中,通过数据库来存储和管理权限与资源的相关配置。这一做法使得安全控制更为灵活,可以动态地更新和扩展系统的访问控制。Spring Security是...
在处理与数据库交互方面,Spring Security提供了更强大的支持,包括长期的remember-me功能和基于数据库的角色与用户管理API。 24.2. 目标 在原有应用中,用户信息和资源访问控制已经在数据库中管理。目标是将现有...
在Spring Security中,需要配置认证机制以便于基于数据库的认证。这里,我们将使用Spring Security的AuthenticationProvider机制来实现认证。 首先,我们需要配置AuthenticationProvider,例如: ```java @...
Spring Security是一个全面的、高度可配置的安全框架,它涵盖了认证、授权以及会话管理等多个方面,而SpringBoot则简化了Spring的配置过程,使得搭建和运行应用程序更加便捷。本项目提供的完整源码和数据库将帮助...
总的来说,Spring Security的动态授权功能使得权限管理变得更加灵活和高效。通过对源代码的适当修改,我们可以构建一个完全可配置的权限管理系统,适应不断变化的业务需求。这个过程涉及多个组件的定制,但一旦设置...
在 Spring Security 的配置类中,你需要定义认证和授权的规则。例如,使用 `httpSecurity` 配置对象设置登录页面、访问控制、CSRF 防护等。同时,通过 `authenticationManager` 和 `accessDecisionManager` 注入...
SpringSecurity是Java开发中一个强大的安全框架,它主要用于实现应用层面的安全控制,包括用户认证、权限授权等。在这个“SpringSecurity-数据库认证-简单授权”的主题中,我们将深入探讨如何结合SpringSecurity与...
项目自身的权限信息结合spring security 框架的实现。 本DEMO只包括从数据库读取登录认证信息,认证通过后 从数据库读取授权信息来控制用户的访问.权限元素包括 用户,角色,菜单以及这三者的关系。 本DEMO使用了...
Spring MVC是Spring框架的一部分,用于处理Web应用程序的请求-响应模型,而Spring Security则是一个强大的安全管理框架,提供了认证和授权功能,帮助开发者保护应用免受恶意攻击。 1. **Spring MVC**: - **核心...
在"spring security用数据库的示例"中,我们将深入探讨如何配置Spring Security以使用数据库进行用户管理和权限控制。 首先,Spring Security的核心组件包括Authentication(认证)和Authorization(授权)。认证是...
在这个“springboot springsecurity动态权限控制”的主题中,我们将深入探讨如何在Spring Boot项目中集成Spring Security,实现动态权限控制,让菜单权限的管理更加灵活和高效。 首先,我们需要理解Spring Security...
它提供了全面的安全解决方案,包括用户认证、权限授权、会话管理、CSRF防护以及基于HTTP的访问控制。在这个例子中,我们将深入探讨如何使用Spring Security进行认证和授权,并结合数据库操作进行动态配置。 首先,...
本教程将深入探讨如何在Spring Boot项目中集成OAuth2,并基于数据库存储相关配置,确保系统的安全性和可扩展性。 首先,OAuth2的核心概念包括四个角色:资源所有者(Resource Owner)、客户端(Client)、授权...
总的来说,理解并掌握Spring Security的权限管理机制,需要对`UserDetails`接口、配置文件的解析以及数据库交互有深入的认识。通过自定义用户实体、配置安全规则以及实现数据访问层,我们可以构建出满足业务需求的...
Spring Security 是一个基于 Java 的安全框架,旨在提供身份验证、授权和访问控制等功能。下面是 Spring Security 的主要知识点: 一、身份验证(Authentication) 身份验证是指对用户身份的验证,以确保用户的...
在Spring Security中,我们需要在配置类中启用Web安全配置,并定义认证和授权规则。首先,我们需要引入Spring Security的依赖,并创建一个扩展自`WebSecurityConfigurerAdapter`的配置类。在这里,我们可以配置`...
你将找到更多关于如何配置和使用SpringSecurity进行权限管理的详细信息,包括配置XML或Java配置、定义访问规则、处理未授权和未认证的异常、自定义权限表达式等。 至于"springsecurity-sample",这可能是一个示例...