`
longzhun
  • 浏览: 368195 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

安全管理四

阅读更多

本篇主要讲动态资源配置

 

通过安全管理一,二,三,这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
分享到:
评论
1 楼 take 2011-12-26  
一模一样的配置,但是重启后,项目还是会有问题.. 不过有区别的在于你的SecurityService有注入. 我的没有.. 是不是这个问题.. 我想得回去试试..
这个是fpm吧?嘿.

相关推荐

    搭建班组安全管理的“四梁八柱”

    在探讨如何搭建班组安全管理的“四梁八柱”之前,我们需要了解准能集团公司的行业背景及其班组建设的重要性。准能集团作为一家大型综合能源企业,涉足煤炭开采、坑口发电、铁路运输及循环经济等多个领域。在这样的...

    安全管理四要素.doc

    安全管理四要素.doc

    项目安全管理手册

    通过对安全管理目的的明确、预防为主方针的贯彻以及“四全”动态管理原则的应用,结合详细的项目安全管理计划和全面的安全管理体系构建,可以有效降低施工过程中的安全风险,保障施工人员的安全与健康,同时确保项目...

    4A(统一安全管理平台)解决方案.pdf

    4A(统一安全管理平台)是企业信息化建设中一个至关重要的组成部分,主要目标是解决日益复杂的IT环境下的身份认证、账号管理、权限分配和安全审计问题。这个概念源于四个英文单词的首字母:Authentication(认证)、...

    奇安信天擎终端安全管理系统管理员手册

    4. 奇安信天擎终端安全管理系统的典型部署形态 5. 终端安全管理的重要性 6. 恶意代码检测和防护的重要性 7. 网络攻击防护的重要性 8. 数据加密和身份验证的重要性 9. 奇安信天擎终端安全管理系统的安全特点 10. 奇...

    企业网络与信息安全管理组织架构.docx

    4. 关键岗位:是企业网络与信息安全管理组织架构中的关键岗位,包括系统管理员、网络管理员、应用开发管理员、平安审计员、平安保密管理员等。这些岗位的人员需要严格遵守保密法规和有关信息安全管理规定。 三、...

    软件开发安全管理规定.doc

    软件开发安全管理规定 软件开发安全管理规定是为了加强软件开发的安全管理,保护软件开发中软件和信息的安全。本规定适用于软件开发过程中的需求分析、设计、开发及测试等阶段的安全管理。 第一章总则 * 软件开发...

    施工现场安全管理基本原则-安全管理-行业安全-建筑安全.docx

    ### 施工现场安全管理基本原则 #### 一、正确处理五种关系 ##### (一)安全与危险并存 1. **安全与危险的关系**:在任何施工现场,安全与危险是并存的,它们之间存在相互对立又相互依赖的关系。安全管理的目的...

    ISO27001信息安全管理体系建设项目咨询服务方案.pptx

    四、信息安全管理体系的优点 信息安全管理体系的实施可以带来许多优点,例如: * 保护企业的信息资产安全 * 降低信息安全风险 * 提高企业的信息安全意识 * 满足相关法规和标准的要求 * 提高企业的竞争力 五、信息...

    Doc_9859_安全管理手册_(SMM)

    它涵盖了风险管理、安全政策、安全保证、安全促进等四个关键领域,旨在将安全管理融入到航空运营的每个环节。 2. **安全政策**:手册中详细介绍了如何制定和传达安全政策,这是组织安全文化的基石。政策应明确组织...

    产品安全性管理规定

    1. **目的与适用范围**:规定旨在通过有效的安全管理,防止产品在生命周期内的安全风险。适用于公司所有原材料、零配件、半成品及成品的安全性管理。各相关部门(如技术中心、质量部、采购部)需协同工作,确保安全...

    大型物业管理公司全套安全管理制度.doc

    【大型物业管理公司全套安全管理制度】 该文档集合了大型物业管理公司在安全管理方面的一系列详细规定和流程,旨在确保物业公司的运营安全,预防事故的发生,保障员工、业主以及设施的安全。以下是其中包含的一些...

    食品安全管理人员培训考核记录.doc

    4. 培训方式:记录食品安全管理人员的培训方式,这包括课堂讲解、实践、在岗培训、自学培训等方式。 知识点:培训方式是食品安全管理人员培训的方式安排,对食品安全管理人员的培训和考核起着重要作用。 5. 授课人...

    《煤炭班组安全管理四个“必须”》范文.docx

    煤炭班组安全管理是煤矿企业安全发展的基石,其四个“必须”是指必须具备较高的素质、必需具有高度的责任、必需树立创新的意识、必需坚持廉洁执法。这四个方面的要求是确保煤炭班组安全监察工作有效实施的关键。 ...

    信息系统数据安全管理制度.pdf

    第二章数据安全管理中,第四条至第十条详细规定了数据安全管理的具体措施: 1. 数据备份要求:备份数据需有明确标识,存储在安全地点,且异地备份以增强安全性。 2. 数据物理安全:重视存储介质的安全,如信息资料...

    2021年XXXX单位信息安全管理制度(等保2.0管理制度模板).docx

    #### 四、安全管理制度的关键要素 1. **物理安全控制:** - 明确机房管理规则,如出入管理、设备维护等。 - 设立责任人,确保机房设施的安全。 2. **网络安全控制:** - 规划合理的网络架构,实施有效的网络...

    一网四格网格化安全管理办法(参考20131016改版).doc

    4. **"一网四格"网格化安全管理**: - "一网"是指工程安全管控网络,通过对工程的风险源进行分析,形成覆盖所有风险作业点的安全管理网络。 - "四格"指的是在垂直和水平方向上明确各级岗位的安全职责,包括方案...

    网络安全管理制度-运行调度指挥中心网络安全管理制度.pdf

    运行调度指挥中心网络安全管理制度 一、网络安全管理人员日常管理职责 1. 网络安全管理人员应当保障计算机网络设备和配套的设施的安全,保障信息 的安全,运行环境的安全。保障网络系统的正常运行,保障信息系统的...

    (完整版)三级等保,安全管理制度,信息安全管理策略.pdf

    它强调了信息安全在业务运营中的重要地位,同时提出了信息安全管理策略的四个基本原则:安全第一、综合防范、预防为主和持续改进。 "安全方针"详细解读了公司的信息安全政策,包括"安全第一",意味着将信息安全视为...

Global site tag (gtag.js) - Google Analytics