- 浏览: 87603 次
- 性别:
- 来自: 厦门
最新评论
-
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 1065这篇文章实现最小生成树的Kruskal算法Kruskal算 ... -
排序算法--插入排序
2013-12-15 00:47 1037插入排序原理:假设 ... -
poi创建下拉框
2013-04-16 19:01 0package finance.tools.salesper ... -
Spring中Transactional配置
2013-04-11 20:43 979Spring中Transactional配置 标签: 杂谈 分 ... -
Hibernate将Enum枚举类型映射为Int类型 .
2013-04-09 16:46 1506最近要用Hibernate做一个枚举类型的映射,在MySQL ... -
Hibernate 更灵活的用法 HibernateCallback
2013-01-22 14:41 1392在项目中用Hibernate的DetachedCriter ... -
spring源代码分析(2)--BeanFactory
2013-01-20 12:38 1388我们首先来看下BeanFacroty接口 pa ... -
spring源代码分析(1)--Resource的分析
2013-01-20 12:22 4006我们知道,在spring中,配置文件是通过资源形式加载的, ... -
DefaultListableBeanFactory研究
2013-01-18 10:49 5876DefaultSingletonBeanRegistry完 ... -
jvm的内存调优
2013-01-11 15:54 8321) 堆 运行时数 ... -
struts2中Action的name 和package的name和namespace是什么作用
2013-01-02 12:16 9601在struts2的 struts.xml 配置中 例: ... -
深入探索 高效的Java异常处理框架
2012-10-22 14:09 879摘要:本文从Java异常最基本的概念、语法开始讲述了Java异 ... -
JAVA对ArrayList排序
2012-10-16 21:53 16486java如何对ArrayList中对象按照该对象某属性排序 ... -
ThreadPoolExecutor使用和思考(中)-keepAliveTime及拒绝策略
2012-09-11 00:48 929工作中多处接触到了ThreadPoolExecutor。趁着现 ... -
ThreadPoolExecutor使用和思考(上)-线程池大小设置与BlockingQueue的三种实现区别
2012-09-11 00:45 1620工作中多处接触到了ThreadPoolExecutor。趁着现 ... -
Spring IOC之BeanFactory
2012-09-10 12:39 1284BeanFactory ,作为 Spring 基础的 IoC ... -
Java5 并发学习
2012-09-10 11:33 796在Java5之后 ... -
Spring对事务管理的支持的发展历程(基础篇
2012-08-31 17:43 918Connection conn = DataS ... -
CXF ,在Client端用于把 Date 类型转换成 XMLGregorianCalendar .
2012-08-31 16:54 1623import javax.xml.datatype.Datat ... -
《Spring技术内幕》学习笔记10——Web环境中Spring的启动过程
2012-07-30 09:04 9811.Spring 不但可以在 JavaSE 环境中应用,在 W ...
相关推荐
Spring Security 把授权信息写入数据库
项目自身的权限信息结合spring security 框架的实现。 本DEMO只包括从数据库读取登录认证信息,认证通过后 从数据库读取授权信息来控制用户的访问.权限元素包括 用户,角色,菜单以及这三者的关系。 本DEMO使用了...
登录流程 1)容器启动(MySecurityMetadataSource:loadResourceDefine加载系统资源与权限列表) 2)用户发出请求 3)过滤器拦截(MySecurityFilter:doFilter) 4)取得请求资源所需权限...内附完整数据库
在开源的SpringSide上作权限控制的demo,附带数据库。分层清晰,设计合理,系统松散耦合。结合业界流行的安全框架精心设计开发。
基于springboot+SpringSecurity的一款权限认证系统源码+数据库.zip基于springboot+SpringSecurity的一款权限认证系统源码+数据库.zip基于springboot+SpringSecurity的一款权限认证系统源码+数据库.zip基于springboot...
springboot springsecurity动态权限控制,实现数据库动态管理菜单权限
Spring security认证授权例子,自动创建数据库,在SysUser类增加字段,即可动态增加数据库对应表sys_user字段(前提是要删除原表,启动应用时才会重建表)
后端使用SpringBoot框架进行业务逻辑开发,利用Spring Security实现权限控制。数据库采用MySQL进行数据存储,使用MyBatis进行数据访问。 权限控制模块设计包括用户、角色和权限三个主要模块。用户模块用于管理用户...
(1)该项目是基于spring3+struts2+hibernate3+spring security3的权限管理项目 (2)后台我已经实现了权限管理,包括用户,角色和资源的分配。前台实现了spring security3的管理 (3)网上案例普遍是后台单一登陆。...
基于SpringBoot+SpringSecurity的RBAC管理系统源码+数据库+项目说明.zip 这是一款基于SpringBoot+SpringSecurity的RBAC权限管理系统。原本只想着做成基于SpringSecurity的权限管理系统,但随着功能的增加感觉有些刹...
2、使用数据库管理用户权限 3、自定义认证数据库表结构 4、自定义登录页面 5、使用数据库管理资源 6、控制用户信息 MD5加密 获取当前用户信息 7、自定义访问拒绝页面 8、动态管理资源结合自定义登录页面 9、 ...
通过修改spring security源代码实现动态权限管理。用户信息、角色信息和资源信息保存在数据库中,可动态配置权限,不用重新启动服务。改完即时生效,付例子
springMVC+springSecurity3+Mybaits3的权限系统 包括用户管理 角色管理 资源管理 服务器配置管理 登陆信息管理 操作日志管理 服务器监控配置 fusioncharts报表插件显示 EMALL发送(支持html语言) springQuartz...
spring boot 使用 Security Json 数据库登录验证 前后端分离权限
SpringBoot+SpringSecurity整合示例代码,实现了从数据库中获取信息进行登录认证和权限认证。 本项目为idea工程,请用idea2019导入(老版应该也可以)。 本项目用户信息所需sql文件,在工程的resources文件夹下,...
spring security3案例,基于数据库存储角色权限资源信息,支持记住我、session并发控制、AJAX调用。
项目的jar没有包含,得自己去导进项目,需要哪些jar里面有附说明。这个项目是是把权限根据数据库定义而控制的。而不是将权限死硬的写在配置文件上。使权限系统更灵活更通用。。
ssh项目整合spring Security,并Spring Security基于数据库验证,给用户授权登录
Spring-Security权限sql角色与菜单的数据库信息