本篇主要讲动态资源配置
通过安全管理一,二,三,这3讲,我们实现了自定义数据库表结构,以及自定义用户认证与授权实现用户权限管理,但我们的资源配置还是写死在配置文件中,而且以后会越来越多,造成了资源配置的不灵活与臃肿,所以在本篇文章中,我们讲实现资源的动态配置
如下:这是目前我们写死的资源配置
<ss:intercept-url pattern="/login.action" access="IS_AUTHENTICATED_ANONYMOUSLY"/>
<ss:intercept-url pattern="/company/company.action" access="ROLE_ADMIN"/>
<ss:intercept-url pattern="/dept/dept.action" access="ROLE_USER"/>
<ss:intercept-url pattern="/**" access="IS_AUTHENTICATED_FULLY"/>
第一步:新增一张资源表与一张资源与角色关系表
create table TEST_RESOURCE
(
ID NUMBER(22) not null,
VALUE VARCHAR2(100),
TYPE VARCHAR2(5) default 'url',
FLAG CHAR(1) default '1',
SEQ NUMBER(22)
)
create table TEST_ROLE_RESOURCE
(
ROLE_ID NUMBER(22),
RESOURCE_ID NUMBER(22)
)
对比
<ss:intercept-url pattern="/login.action" access="IS_AUTHENTICATED_ANONYMOUSLY"/>
<ss:intercept-url pattern="/company/company.action" access="ROLE_ADMIN"/>
<ss:intercept-url pattern="/dept/dept.action" access="ROLE_USER"/>
<ss:intercept-url pattern="/**" access="IS_AUTHENTICATED_FULLY"/>
一目了然,将资源从配置文件转移到了数据库
第二步:在安全管理三中提到的Security中 ,添加2个属性
private String roleName;
private String resourceValue;
第三步:编写DefinitionSourceFactoryBean
package com.longzhun.fpm.security;
import java.util.LinkedHashMap;
import java.util.List;
import org.springframework.beans.factory.FactoryBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.security.ConfigAttributeDefinition;
import org.springframework.security.ConfigAttributeEditor;
import org.springframework.security.intercept.web.DefaultFilterInvocationDefinitionSource;
import org.springframework.security.intercept.web.FilterInvocationDefinitionSource;
import org.springframework.security.intercept.web.RequestKey;
import org.springframework.security.util.AntUrlPathMatcher;
import org.springframework.security.util.UrlMatcher;
import org.springframework.stereotype.Component;
import com.longzhun.fpm.security.service.SecurityService;
public class DefinitionSourceFactoryBean implements FactoryBean{
@Autowired
@Qualifier("securityService")
private SecurityService securityService;
public Object getObject() throws Exception {
return new DefaultFilterInvocationDefinitionSource(getUrlMatcher(), buildRequestMap());
}
@SuppressWarnings("unchecked")
public Class getObjectType() {
return FilterInvocationDefinitionSource.class;
}
public boolean isSingleton() {
return true;
}
protected UrlMatcher getUrlMatcher(){
return new AntUrlPathMatcher();
}
protected LinkedHashMap<RequestKey, ConfigAttributeDefinition> buildRequestMap(){
List<Security> resources = securityService.getResources();
LinkedHashMap<RequestKey, ConfigAttributeDefinition> distMap = new LinkedHashMap<RequestKey, ConfigAttributeDefinition>();
ConfigAttributeEditor edit = null;
for(Security security : resources){
System.out.println(security.getRoleName()+" : "+security.getResourceValue());
if(security.getRoleName() != null){
edit = new ConfigAttributeEditor();
RequestKey key = new RequestKey(security.getResourceValue(), null);
edit.setAsText(security.getRoleName());
distMap.put(key, (ConfigAttributeDefinition)edit.getValue());
}
}
return distMap;
}
}
securityService方法我就不写出来了,就一个方法getResources()
我将getResources()的sql查询语句写给大家
select r.role_name roleName,res.value resourceValue from test_role r,test_role_resource rr,test_resource res
where r.id = rr.role_id and res.id = rr.resource_id order by res.seq
第四步:修改applicationContext-security.xml,最后配置如下
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:ss="http://www.springframework.org/schema/security"
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.0.xsd
http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-2.0.1.xsd"
default-autowire="byType">
<ss:http auto-config="true">
<ss:intercept-url pattern="/common/**" filters="none"/>
<ss:intercept-url pattern="/css/**" filters="none"/>
<ss:intercept-url pattern="/images/**" filters="none"/>
<ss:intercept-url pattern="/js/**" filters="none"/>
<ss:form-login
login-page="/login.action"
authentication-failure-url="/login.action?error=true"
default-target-url="/"
always-use-default-target="true"
/> <!-- default-target-url登录成功页 /代表系统默认路径
always-use-default-target="true" session过期,跳回登录页面,再次登录时,不让跳转至之前操作的地址-->
</ss:http>
<ss:authentication-provider user-service-ref="userDetailsService"/>
<bean id="definitionSource" class="com.longzhun.fpm.security.DefinitionSourceFactoryBean"/>
<bean id="filterSecurityInterceptor" class="org.springframework.security.intercept.web.FilterSecurityInterceptor">
<ss:custom-filter before="FILTER_SECURITY_INTERCEPTOR"/>
<property name="objectDefinitionSource" ref="definitionSource"/>
</bean>
</beans>
- 大小: 25.6 KB
- 大小: 45.1 KB
分享到:
相关推荐
ISMS深度解析之人员安全管理4 ISMS深度解析之物理环境安全管理5 ISMS深度解析之通信与操作管理类6 ISMS深度解析之访问控制7 ISMS深度解析之信息系统获取开发和维护8 ISMS深度解析之安全事件管理类9 ISMS深度解析之...
在探讨如何搭建班组安全管理的“四梁八柱”之前,我们需要了解准能集团公司的行业背景及其班组建设的重要性。准能集团作为一家大型综合能源企业,涉足煤炭开采、坑口发电、铁路运输及循环经济等多个领域。在这样的...
【业主安全管理“四项责任”详解】 业主在安全管理中承担着重要的职责,这“四项责任”源自于国家电力监管委员会和中国电力投资集团公司的相关规定,旨在确保电力生产过程中的安全。以下是对这四个方面进行的详细...
ISMS深度解析之人员安全管理4 ISMS深度解析之物理环境安全管理5 ISMS深度解析之通信与操作管理类6 ISMS深度解析之访问控制7 ISMS深度解析之信息系统获取开发和维护8 ISMS深度解析之安全事件管理类9 ISMS深度解析之...
4A(统一安全管理平台)是企业信息化建设中一个至关重要的组成部分,主要目标是解决日益复杂的IT环境下的身份认证、账号管理、权限分配和安全审计问题。这个概念源于四个英文单词的首字母:Authentication(认证)、...
4. 奇安信天擎终端安全管理系统的典型部署形态 5. 终端安全管理的重要性 6. 恶意代码检测和防护的重要性 7. 网络攻击防护的重要性 8. 数据加密和身份验证的重要性 9. 奇安信天擎终端安全管理系统的安全特点 10. 奇...
网络与信息安全管理员四级实操卷与考试题,适用于网络安全管理员等级考试,也适用于上班族职称考评,证书考取。
《外包软件开发安全管理规定》是针对互联网行业中外包软件开发的安全管理规范,旨在确保企业在软件系统的整个生命周期中,从采购到使用、维护,都能遵循信息安全的标准和要求,防范潜在的风险。以下将详细阐述其中的...
软件开发安全管理规定 软件开发安全管理规定是为了加强软件开发的安全管理,保护软件开发中软件和信息的安全。本规定适用于软件开发过程中的需求分析、设计、开发及测试等阶段的安全管理。 第一章总则 * 软件开发...
四、信息安全管理体系的优点 信息安全管理体系的实施可以带来许多优点,例如: * 保护企业的信息资产安全 * 降低信息安全风险 * 提高企业的信息安全意识 * 满足相关法规和标准的要求 * 提高企业的竞争力 五、信息...
它涵盖了风险管理、安全政策、安全保证、安全促进等四个关键领域,旨在将安全管理融入到航空运营的每个环节。 2. **安全政策**:手册中详细介绍了如何制定和传达安全政策,这是组织安全文化的基石。政策应明确组织...
1. **目的与适用范围**:规定旨在通过有效的安全管理,防止产品在生命周期内的安全风险。适用于公司所有原材料、零配件、半成品及成品的安全性管理。各相关部门(如技术中心、质量部、采购部)需协同工作,确保安全...
4. 培训方式:记录食品安全管理人员的培训方式,这包括课堂讲解、实践、在岗培训、自学培训等方式。 知识点:培训方式是食品安全管理人员培训的方式安排,对食品安全管理人员的培训和考核起着重要作用。 5. 授课人...
4. 信息安全管理体系的实施和维护:信息安全管理体系的实施和维护是确保组织信息资产安全的关键。 5. 国际标准和国家标准的重要性:国际标准和国家标准是信息安全管理体系的基础,提供了通用语言和框架。 6. 组织...
《网络安全管理办法》是中国石油天然气集团有限公司为规范网络安全管理,确保网络稳定可靠运行和数据安全而制定的规章制度。该办法依据了国家的相关法律法规,如《中华人民共和国网络安全法》、《网络安全等级保护...
#### 四、安全管理制度的关键要素 1. **物理安全控制:** - 明确机房管理规则,如出入管理、设备维护等。 - 设立责任人,确保机房设施的安全。 2. **网络安全控制:** - 规划合理的网络架构,实施有效的网络...
4. **"一网四格"网格化安全管理**: - "一网"是指工程安全管控网络,通过对工程的风险源进行分析,形成覆盖所有风险作业点的安全管理网络。 - "四格"指的是在垂直和水平方向上明确各级岗位的安全职责,包括方案...
数据安全管理办法旨在规范企业对数据资产的管理,确保数据的安全性、完整性和可用性,防止数据泄露,符合国家法律法规的要求。这份文档详细规定了数据安全的各个方面,包括数据资产的范围、安全管理的角色与职责、...
第四章和第五章分别针对系统建设和运行维护阶段的网络安全管理提出了具体要求。在系统建设中,应明确网络安全需求,遵循等级保护制度,推进国产化应用,加强软件正版化,严格控制系统的变更管理。系统开发、测试和...
四、安全策略管理 * 安全策略申请:任何涉及网络安全策略开通,必须提交书面申请,并明确策略开通的有效期,如到期需继续使用,应再次提交申请。 * 安全策略评审:网络安全组应对申请开通安全策略的必要性及安全性...