研究了一下Springside下面的security部分的代码。其实security主要包括了两部分的内容。
1. 用户十分为合法用户。
2. 用户有哪些权限。
这些内容都是在userDetailsService中实现的。只需要重载这个接口,实现
public UserDetails loadUserByUsername(String userName) throws UsernameNotFoundException, DataAccessException
这个方法即可。这个方法会返回用户的基本信息,如名字和密码。还包括用户的具体权限,如A_VIEW_USER,A_MODIFY_USER,A_VIEW_ROLE(这些都是配在数据库中的)等等。
当用户访问一个url的时候,系统会通过
<bean id="databaseDefinitionSource" class="org.springside.modules.security.springsecurity.DefinitionSourceFactoryBean">
<property name="resourceDetailsService" ref="resourceDetailsService" />
</bean>
来确定用户需要哪些权限才能访问这个url。resourceDetailsService可以去数据库中取出这个关系。
当然如果你要把这种关系配到xml里面也是可以的,如下:
<http auto-config="true" access-decision-manager-ref="accessDecisionManager">
<intercept-url pattern="/security/user!save*" access="A_MODIFY_USER" />
<intercept-url pattern="/security/user!delete*" access="A_MODIFY_USER" />
<intercept-url pattern="/security/user*" access="A_VIEW_USER" />
<intercept-url pattern="/security/role!save*" access="A_MODIFY_ROLE" />
<intercept-url pattern="/security/role!delete*" access="A_MODIFY_ROLE" />
<intercept-url pattern="/security/role*" access="A_VIEW_ROLE" />
<form-login login-page="/login.action" default-target-url="/" authentication-failure-url="/login.action?error=true" />
<logout logout-success-url="/" />
<remember-me key="e37f4b31-0c45-11dd-bd0b-0800200c9a66" />
</http>
如果使用用户,角色,权限三层模式,最好把权限的前缀改一改,
<bean id="accessDecisionManager" class="org.springframework.security.vote.AffirmativeBased">
<property name="decisionVoters">
<list>
<bean class="org.springframework.security.vote.RoleVoter">
<property name="rolePrefix" value="A_" />
</bean>
<bean class="org.springframework.security.vote.AuthenticatedVoter" />
</list>
</property>
</bean>
下面是完整的xml
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/security" xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
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"
default-autowire="byType" default-lazy-init="true">
<beans:description>使用SpringSecurity的安全配置文件</beans:description>
<!-- 在此定义URL与授权的关系. 而用户、角色、授权及三者的关系则保存在数据库中. -->
<http auto-config="true" access-decision-manager-ref="accessDecisionManager">
<intercept-url pattern="/security/user!save*" access="A_MODIFY_USER" />
<intercept-url pattern="/security/user!delete*" access="A_MODIFY_USER" />
<intercept-url pattern="/security/user*" access="A_VIEW_USER" />
<intercept-url pattern="/security/role!save*" access="A_MODIFY_ROLE" />
<intercept-url pattern="/security/role!delete*" access="A_MODIFY_ROLE" />
<intercept-url pattern="/security/role*" access="A_VIEW_ROLE" />
<form-login login-page="/login.action" default-target-url="/" authentication-failure-url="/login.action?error=true" />
<logout logout-success-url="/" />
<remember-me key="e37f4b31-0c45-11dd-bd0b-0800200c9a66" />
</http>
<authentication-provider user-service-ref="userDetailsService">
<!-- 可设置hash使用sha1或md5散列密码后再存入数据库 -->
<password-encoder hash="plaintext" />
</authentication-provider>
<beans:bean id="userDetailsService" class="org.springside.examples.miniweb.service.security.UserDetailServiceImpl" />
<!-- 将授权的默认前缀由ROLE_改为A_ -->
<beans:bean id="accessDecisionManager" class="org.springframework.security.vote.AffirmativeBased">
<beans:property name="decisionVoters">
<beans:list>
<beans:bean class="org.springframework.security.vote.RoleVoter">
<beans:property name="rolePrefix" value="A_" />
</beans:bean>
<beans:bean class="org.springframework.security.vote.AuthenticatedVoter" />
</beans:list>
</beans:property>
</beans:bean>
</beans:beans>
分享到:
相关推荐
ss52ss ss52ss ss52ss ss52ss ss52ss ss52ss ss52ss ss52ss
spring security的中文学习文档,很好用的
node的学习ss
ss3-*一共12个demo, 每个demo介绍springsecurity的部分功能, 对springsecurity进行迭代展示. ss3-7 ss3-1 ~ ss3-6使用基于session的方式进行认证, 从ss3-7开始将构建restful的无状态带凭证认证. ss3-6 该项目在ss3-5...
SS法语言发育迟缓学习教案.pptx
ss310中文资料
基于SS3型电力机车3段桥的仿真模型,压缩文件SS1,SS2,SS3分别是3段桥的3种工作状态
NULL 博文链接:https://ss3ex.iteye.com/blog/378413
HD3SS460 EVM.pdf
SSIF蓝光3d视频文件播放器 内有注册码 高码率无压力 自由调节左右上下插帧模式的3d视频 完美支持蓝光格式文件.ssif
计算机安全界会议USENIX Security Symposium 2012年的会议论文集,关于该会议,可参考下面的介绍: USENIX Security:91分。USENIX是systems research方面的重要组织,主办了systems方面的若干重要会议,如OSDI...
======================= 特别提醒大家: ...该资源实际上只是USENIX Security 2013年论文中的第一篇(由于是在上传不到CSDN上,请大家务必到这里下载最新的论文集:http://hi.baidu.com/ictpapers)
蓝光3D文件格式(ssif)介绍 蓝光立体播放机 蓝光原盘文件构成 用于蓝光3D的BDAV MPEG-2传输流中的基本流 MPEG2-TS封装结构
计算机安全界会议USENIX Security Symposium 2011年的会议论文集,关于该会议,可参考下面的介绍: USENIX Security:91分。USENIX是systems research方面的重要组织,主办了systems方面的若干重要会议,如OSDI...
ss3 按钮简单10种颜色线性渐变web buttons网页按钮
完整的RBAC结构(数据库扩展形式),完整安全流程访问(依赖SPRING SECURITY的过滤链),多数据源切换(依赖SPRING),数据缓存功能(依赖EHCACHE)
struts2,hibernate,spring学习资料lib
扩展了springsecurity3的相关接口,权限管理:用户,角色,权限,资源以及两两相关的表,共7张。包含jar,可直接运行
日本岩崎电器株式会社SS7804及SS7810示波器的使用使用说明,
通讯类的标准。对要开发SS7的朋友有很大帮助的。(通讯协议)