`
archerfrank
  • 浏览: 13666 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

SS3中security部分的学习

阅读更多
研究了一下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>



分享到:
评论

相关推荐

    ss.rar_java security_spring security_springsecurity4xss

    **Spring Security 深度解析** Spring Security 是 Java 开发中的一个强大且全面的安全框架,专为..."ss.pdf"这份文档作为Spring Security的学习资料,应该包含了详细的介绍和示例,对于理解和掌握该框架非常有帮助。

    springboot-dubbo-ss-planel-pro.zip

    【标题】"springboot-dubbo-ss-planel-pro.zip"是一个包含Spring Boot、Dubbo、Spring Security和Planer Pro项目的压缩包,它整合了多种技术,用于构建分布式微服务系统。这个项目涉及到的主要知识点包括: 1. **...

    SS实现汽车租赁系统

    3. **汽车管理**:这部分涉及车辆的信息管理,如车型、颜色、可用状态等。可能还包括汽车维护记录和位置追踪等细节,所有这些数据都将与数据库交互。 4. **业务管理**:此模块处理租赁业务的核心流程,包括租车申请...

    3G核心网学习材料.rar

    5. **会话控制**:SS7信令系统在3G网络中起到会话控制作用,用于建立、维护和释放通信连接。 6. **安全机制**:3G核心网采用加密和鉴权机制,如通用分组无线业务(GPRS)安全框架(GPRS Security),以保护用户数据...

    关于SS框架后台代码开发规范实例

    3. **注解驱动编程**:在Struts2和Spring中,使用注解可以简化配置,如@Controller、@Service、@Repository和@Autowired等,使得代码更简洁,易于理解。 4. **Action设计**:在Struts2中,每个Action类代表一个业务...

    电信设备-传送信令消息的方法和设备.zip

    这部分内容可能在文档中有所涉及,包括常见的安全协议和实践,如TLS(Transport Layer Security)和IPSec(Internet Protocol Security)。 此外,文档可能还涵盖了信令优化和性能提升的技术,如信令负荷控制、信令...

    华为的部分笔试题目程序的

    1. **IPSec**:IPSec(Internet Protocol Security)是一种用于网络安全的框架,它在第三层(网络层)提供加密和身份验证服务,以保护IP数据包的安全。由于其工作在网络层,因此是三层协议。 2. **L2TP**:Layer 2 ...

    RSA加密算法--java实现

    RSA加密算法是公钥密码学中的一个重要组成部分,它由Ron Rivest、Adi Shamir和 Leonard Adleman 在1977年共同提出,因此得名RSA。这种算法基于大整数因子分解的困难性,为数据传输提供安全的加密手段。在Java中实现...

    电信设备-接口呼叫信令协议.zip

    在电信行业中,接口呼叫信令协议是通信网络中不可或缺的一部分,它主要用于控制和管理通信设备之间的交互。这个压缩包文件“电信设备-接口呼叫信令协议.zip”包含了一个名为“接口呼叫信令协议.pdf”的文档,很显然...

    最新ARI

    【描述】中的"NULL"意味着没有提供具体的描述信息,我们无法直接从这个部分获取详细的知识点。不过,通过提供的博文链接——https://rzy.iteye.com/blog/1909845,我们可以尝试访问该博客来寻找更多关于"最新ARI"的...

    决策支持系统体系架构

    - **社会安全**(Social Security, Ss):涵盖社会治安、公共健康和社会福利等方面。 - **军事安全**(Military Security, Ms):主要关注国防力量的建设和发展。 - **生态安全**(Ecological Security, Es):包括...

    Linux101 Hacks 2rd

    `cut`命令用于从每个输入行中切割出特定的部分。例如,`cut -d: -f1 /etc/passwd`从`/etc/passwd`文件中提取出用户名。 **Hack 17. Stat Command** `stat`命令用于显示文件的状态信息。例如,`stat file`显示文件`...

    AIX6.1系统安装(串口)配置手册v1.0

    ### AIX6.1系统安装(串口)配置手册知识点详解 #### 一、版本 - **操作系统**: IBM的AIX6.1。 #### 二、准备光盘 - **系统安装盘**: DVD2...通过这些知识点的学习, 可以更好地理解和掌握AIX6.1系统的安装与配置过程。

    MTK MMI培训资料

    - **CSM**(Call Service Management):处理呼叫服务管理,如承载能力处理、CSD/FAX服务、呼叫控制(CC)和补充服务(SS)。 - **RAC**(Registration Access Control):管理GSM/GPRS注册、PLMN列表/选择及RSSI...

    软件工程工资管理系统

    根据该公司的工资管理实际情况,本系统将工资结构分为基础工资、岗位工资、工龄工资三部分。该模块可以对这三个工资类型设置工资等级,并对每个等级设置工资标准。 2.1.2.3工资汇总模块 用户在员工信息管理模块对该...

Global site tag (gtag.js) - Google Analytics