本篇主要讲动态资源配置
通过安全管理一,二,三,这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
分享到:
相关推荐
【安全管理四要素】 安全管理是企业运营中的核心环节,关乎企业稳定和员工安全。本文将深入探讨安全管理的四个关键要素:管理层的承诺与员工参与、工作现场危害分析、预防措施的制定与执行,以及危害评估方法。 一...
在探讨如何搭建班组安全管理的“四梁八柱”之前,我们需要了解准能集团公司的行业背景及其班组建设的重要性。准能集团作为一家大型综合能源企业,涉足煤炭开采、坑口发电、铁路运输及循环经济等多个领域。在这样的...
【业主安全管理“四项责任”详解】 业主在安全管理中承担着重要的职责,这“四项责任”源自于国家电力监管委员会和中国电力投资集团公司的相关规定,旨在确保电力生产过程中的安全。以下是对这四个方面进行的详细...
第二章安全管理机构 2.1、信息安全组织及岗位职责管理规定 2.2、信息安全检查与审计管理制度 第三章人员安全管理 3.1、内部人员信息安全管理规定 3.2、外部人员访问信息安全管理规定 第四章系统建设管理 4.1、定级...
4. **管理安全**:通过制定和执行安全管理策略来确保信息系统的安全性。 在信息保障的概念中,信息安全还包含以下要素: - **机密性**(Confidentiality):确保信息只被授权用户访问。 - **完整性**(Integrity)...
ISMS深度解析之人员安全管理4 ISMS深度解析之物理环境安全管理5 ISMS深度解析之通信与操作管理类6 ISMS深度解析之访问控制7 ISMS深度解析之信息系统获取开发和维护8 ISMS深度解析之安全事件管理类9 ISMS深度解析之...
网络与信息安全管理员四级实操卷与考试题,适用于网络安全管理员等级考试,也适用于上班族职称考评,证书考取。
4A(统一安全管理平台)是企业信息化建设中一个至关重要的组成部分,主要目标是解决日益复杂的IT环境下的身份认证、账号管理、权限分配和安全审计问题。这个概念源于四个英文单词的首字母:Authentication(认证)、...
4. 奇安信天擎终端安全管理系统的典型部署形态 5. 终端安全管理的重要性 6. 恶意代码检测和防护的重要性 7. 网络攻击防护的重要性 8. 数据加密和身份验证的重要性 9. 奇安信天擎终端安全管理系统的安全特点 10. 奇...
《外包软件开发安全管理规定》是针对互联网行业中外包软件开发的安全管理规范,旨在确保企业在软件系统的整个生命周期中,从采购到使用、维护,都能遵循信息安全的标准和要求,防范潜在的风险。以下将详细阐述其中的...
4. 关键岗位:是企业网络与信息安全管理组织架构中的关键岗位,包括系统管理员、网络管理员、应用开发管理员、平安审计员、平安保密管理员等。这些岗位的人员需要严格遵守保密法规和有关信息安全管理规定。 三、...
软件开发安全管理规定 软件开发安全管理规定是为了加强软件开发的安全管理,保护软件开发中软件和信息的安全。本规定适用于软件开发过程中的需求分析、设计、开发及测试等阶段的安全管理。 第一章总则 * 软件开发...
四、信息安全管理体系的优点 信息安全管理体系的实施可以带来许多优点,例如: * 保护企业的信息资产安全 * 降低信息安全风险 * 提高企业的信息安全意识 * 满足相关法规和标准的要求 * 提高企业的竞争力 五、信息...
它涵盖了风险管理、安全政策、安全保证、安全促进等四个关键领域,旨在将安全管理融入到航空运营的每个环节。 2. **安全政策**:手册中详细介绍了如何制定和传达安全政策,这是组织安全文化的基石。政策应明确组织...
运行调度指挥中心网络安全管理制度 一、网络安全管理人员日常管理职责 1. 网络安全管理人员应当保障计算机网络设备和配套的设施的安全,保障信息 的安全,运行环境的安全。保障网络系统的正常运行,保障信息系统的...
1. **目的与适用范围**:规定旨在通过有效的安全管理,防止产品在生命周期内的安全风险。适用于公司所有原材料、零配件、半成品及成品的安全性管理。各相关部门(如技术中心、质量部、采购部)需协同工作,确保安全...
ISSE强调在项目的全生命周期中实施安全管理,以确保系统的安全性能。 三、工程管理要求 1. 需求分析:在项目启动初期,必须明确信息安全需求,包括合规性要求、业务需求和风险评估结果,为后续设计提供基础。 2. ...
随着数据安全法的颁布和实施,越来越多的企业开始寻求建立一套完善的数据安全管理体系,以保护其数据资产的安全性、完整性与可用性。本文将对数据安全管理办法进行详细梳理和总结,为企业用户提供基础性的管理框架,...
【大型物业管理公司全套安全管理制度】 该文档集合了大型物业管理公司在安全管理方面的一系列详细规定和流程,旨在确保物业公司的运营安全,预防事故的发生,保障员工、业主以及设施的安全。以下是其中包含的一些...
4. 培训方式:记录食品安全管理人员的培训方式,这包括课堂讲解、实践、在岗培训、自学培训等方式。 知识点:培训方式是食品安全管理人员培训的方式安排,对食品安全管理人员的培训和考核起着重要作用。 5. 授课人...