研究了一下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>
分享到:
相关推荐
**Spring Security 深度解析** Spring Security 是 Java 开发中的一个强大且全面的安全框架,专为..."ss.pdf"这份文档作为Spring Security的学习资料,应该包含了详细的介绍和示例,对于理解和掌握该框架非常有帮助。
【标题】"springboot-dubbo-ss-planel-pro.zip"是一个包含Spring Boot、Dubbo、Spring Security和Planer Pro项目的压缩包,它整合了多种技术,用于构建分布式微服务系统。这个项目涉及到的主要知识点包括: 1. **...
3. **汽车管理**:这部分涉及车辆的信息管理,如车型、颜色、可用状态等。可能还包括汽车维护记录和位置追踪等细节,所有这些数据都将与数据库交互。 4. **业务管理**:此模块处理租赁业务的核心流程,包括租车申请...
5. **会话控制**:SS7信令系统在3G网络中起到会话控制作用,用于建立、维护和释放通信连接。 6. **安全机制**:3G核心网采用加密和鉴权机制,如通用分组无线业务(GPRS)安全框架(GPRS Security),以保护用户数据...
3. **注解驱动编程**:在Struts2和Spring中,使用注解可以简化配置,如@Controller、@Service、@Repository和@Autowired等,使得代码更简洁,易于理解。 4. **Action设计**:在Struts2中,每个Action类代表一个业务...
这部分内容可能在文档中有所涉及,包括常见的安全协议和实践,如TLS(Transport Layer Security)和IPSec(Internet Protocol Security)。 此外,文档可能还涵盖了信令优化和性能提升的技术,如信令负荷控制、信令...
1. **IPSec**:IPSec(Internet Protocol Security)是一种用于网络安全的框架,它在第三层(网络层)提供加密和身份验证服务,以保护IP数据包的安全。由于其工作在网络层,因此是三层协议。 2. **L2TP**:Layer 2 ...
RSA加密算法是公钥密码学中的一个重要组成部分,它由Ron Rivest、Adi Shamir和 Leonard Adleman 在1977年共同提出,因此得名RSA。这种算法基于大整数因子分解的困难性,为数据传输提供安全的加密手段。在Java中实现...
在电信行业中,接口呼叫信令协议是通信网络中不可或缺的一部分,它主要用于控制和管理通信设备之间的交互。这个压缩包文件“电信设备-接口呼叫信令协议.zip”包含了一个名为“接口呼叫信令协议.pdf”的文档,很显然...
- **社会安全**(Social Security, Ss):涵盖社会治安、公共健康和社会福利等方面。 - **军事安全**(Military Security, Ms):主要关注国防力量的建设和发展。 - **生态安全**(Ecological Security, Es):包括...
`cut`命令用于从每个输入行中切割出特定的部分。例如,`cut -d: -f1 /etc/passwd`从`/etc/passwd`文件中提取出用户名。 **Hack 17. Stat Command** `stat`命令用于显示文件的状态信息。例如,`stat file`显示文件`...
### AIX6.1系统安装(串口)配置手册知识点详解 #### 一、版本 - **操作系统**: IBM的AIX6.1。 #### 二、准备光盘 - **系统安装盘**: DVD2...通过这些知识点的学习, 可以更好地理解和掌握AIX6.1系统的安装与配置过程。
- **CSM**(Call Service Management):处理呼叫服务管理,如承载能力处理、CSD/FAX服务、呼叫控制(CC)和补充服务(SS)。 - **RAC**(Registration Access Control):管理GSM/GPRS注册、PLMN列表/选择及RSSI...
根据该公司的工资管理实际情况,本系统将工资结构分为基础工资、岗位工资、工龄工资三部分。该模块可以对这三个工资类型设置工资等级,并对每个等级设置工资标准。 2.1.2.3工资汇总模块 用户在员工信息管理模块对该...