`
wmj2003
  • 浏览: 99773 次
  • 来自: ...
文章分类
社区版块
存档分类
最新评论

spring-security2.0.2初步配置

阅读更多
使用了spring security之后,网页的显示速度明显变慢,看来spring security的使用还是需要优化配置的。



在web.xml中配置



 <!--  配置spring acegi 使用的  和com.work.core.QxglConstants.USE_ACEGI=true 配合使用

 <filter>

  <filter-name>springSecurityFilterChain</filter-name>

  <filter-class>

   org.springframework.web.filter.DelegatingFilterProxy

  </filter-class>

 </filter>



 <filter-mapping>

  <filter-name>springSecurityFilterChain</filter-name>

  <url-pattern>/*</url-pattern>

 </filter-mapping>



 <listener>



 <listener>

  <listener-class>

   org.springframework.web.context.ContextLoaderListener

  </listener-class>

 </listener>

  <listener-class>

   org.springframework.security.ui.session.HttpSessionEventPublisher

  </listener-class>

 </listener>

 -->



然后配置applicationContext-spring-security-2.0.2.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.0.xsd http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-2.0.xsd">

  

 <authentication-manager alias="authenticationManager" />

 <beans:bean id="accessDecisionManager"

  class="org.springframework.security.vote.AffirmativeBased">

  <beans:property name="allowIfAllAbstainDecisions" value="false" /><!-- allowIfAllAbstainDecisions : 设定是否允许:“没人反对就通过”的投票策略 -->

  <beans:property name="decisionVoters"><!-- 定义投票者 -->

   <beans:list>

    <beans:bean class="org.springframework.security.vote.RoleVoter" />

    <beans:bean class="org.springframework.security.vote.AuthenticatedVoter" />

   </beans:list>

  </beans:property>

 </beans:bean>

 <beans:bean id="filterInvocationInterceptor"

  class="org.springframework.security.intercept.web.FilterSecurityInterceptor">

  <!--  配置上之后secureResourceFilter 没有被执行!不知道其他朋友们有没有碰到这个问题。如果也碰到了,请问您是如何解决的?-->

  <beans:property name="authenticationManager" ref="authenticationManager" />

  <beans:property name="accessDecisionManager" ref="accessDecisionManager" />

  <beans:property name="objectDefinitionSource" ref="secureResourceFilter" />

 </beans:bean>

 <beans:bean id="secureResourceFilter" class="com.work.qxgl.springsecurity.MySecureResourceFilter" />



 <http auto-config="true" access-denied-page="/commons/403.jsp">

  <intercept-url pattern="/" access="ROLE_USER"/>

  <intercept-url pattern="/css/**" access="IS_AUTHENTICATED_ANONYMOUSLY" />

  <intercept-url pattern="/images/**" access="IS_AUTHENTICATED_ANONYMOUSLY" />

  <intercept-url pattern="/imageszhuye/**" access="IS_AUTHENTICATED_ANONYMOUSLY" />

  <intercept-url pattern="/js/**" access="IS_AUTHENTICATED_ANONYMOUSLY" />

  <intercept-url pattern="/ganjian*/**" access="ROLE_SUPERVISOR,ROLE_enterprise_manager"/>

  <intercept-url pattern="/qxgl/menutree/**" access="ROLE_SUPERVISOR,ROLE_USER"/>

  <intercept-url pattern="/qxgl*/**" access="ROLE_SUPERVISOR,ROLE_PERMITMANAGER"/>

  <intercept-url pattern="/**" access="IS_AUTHENTICATED_ANONYMOUSLY" /> <!-- access="ROLE_ANONYMOUS" -->

  

  <concurrent-session-control max-sessions="1" exception-if-maximum-exceeded="true" />

  <form-login login-page="/acegilogin.jsp" authentication-failure-url="/acegilogin.jsp"

   default-target-url="/sysmain.action" />

   <!-- 在这里获取用户登陆的详细的信息 ,sysmain.action 在这里可以记录用户登陆的信息。成功执行!-->

  <logout logout-success-url="/logout.jsp" /><!-- j_spring_security_logout 这里是退出的URL,那么可以在这里做接口 在logout.jsp 中调用您自己的logout程序。  -->

 </http>

  <!-- Automatically receives AuthenticationEvent messages -->

 <beans:bean id="loggerListener" class="org.springframework.security.event.authentication.LoggerListener" />

 <authentication-provider >

  <jdbc-user-service data-source-ref="dataSource" 

   users-by-username-query="SELECT U.user_account as username, U.user_password as password, 'true' AS enabled FROM qxgl_user U where U.user_issysuser=1 and  U.user_account=?"

   authorities-by-username-query="select a.user_account as username,c.role_name as authority from qxgl_user a ,qxgl_user_role b,qxgl_role c where a.user_id=b.user_id and b.role_id=c.role_id and a.user_account=?" />

   <!-- 还支持 group-authorities-by-username-query  -->

 </authentication-provider>

</beans:beans>


java程序MySecureResourceFilter 
package com.work.qxgl.springsecurity;



import java.util.Collection;

import java.util.List;



import org.apache.commons.logging.Log;

import org.apache.commons.logging.LogFactory;

import org.springframework.security.ConfigAttributeDefinition;

import org.springframework.security.ConfigAttributeEditor;

import org.springframework.security.intercept.web.FilterInvocation;

import org.springframework.security.intercept.web.FilterInvocationDefinitionSource;



import com.work.core.spring.MyBeanUtil;

import com.work.qxgl.model.QxglRole;

import com.work.qxgl.usermodel.UserModelServiceDao;



/**

 * TODO 虽然配置上没有出错!但是也没有起作用。不爽!!!

 * @author wangmingjie

 *

 */

public class MySecureResourceFilter implements FilterInvocationDefinitionSource {

	private static Log log = LogFactory.getLog(MySecureResourceFilter.class);

	

	public ConfigAttributeDefinition getAttributes(Object filter)

			throws IllegalArgumentException {



		FilterInvocation filterInvocation = (FilterInvocation) filter;



		String url = filterInvocation.getRequestUrl();

		if(log.isDebugEnabled()){

			log.debug("UR为:"+url);

		}

		UserModelServiceDao userModelServiceDao = (UserModelServiceDao) MyBeanUtil

				.getBean("userModelServiceDao");

		List<QxglRole> urlRoles = userModelServiceDao.getRolesByUrl(url);



		ConfigAttributeEditor configAttrEditor = new ConfigAttributeEditor();

		// get the Roles that can access this Url

		// 获取到能够访问这些资源的resource,用户根据这些资源动态的到数据库中去查找;

		// 这里可以增加权限的动态控制,例如将权限存放到数据库中,将这些资源查询出来放到缓存中。

		// 增加对缓存的管理,一旦数据库中的内容变更了,那么就手工去更新缓存。当然也可以增加监听器,不过效率上有问题。



		StringBuffer rolesList = new StringBuffer();

		

		if (urlRoles == null || urlRoles.size() < 1) {

			//如果此URL没有赋给任何用户,那么就给他增加form认证的基本角色。

			if(log.isDebugEnabled()){

				log.debug("URL没有赋给任何用户,给他增加form认证的基本角色ROLE_USER。");

			}

			rolesList.append("ROLE_USER,");

		} else {

			for (QxglRole role : urlRoles) {

				rolesList.append(role.getRoleName());

				rolesList.append(",");

			}

			// don't want to end with a "," so remove the last ","

			if (rolesList.length() > 0)

				rolesList.replace(rolesList.length() - 1,

						rolesList.length() + 1, "");

		}

		if(log.isDebugEnabled()){

			log.debug("URL"+url+"拥有的角色为:"+rolesList.toString());

		}

		configAttrEditor.setAsText(rolesList.toString());

		return (ConfigAttributeDefinition) configAttrEditor.getValue();



	}



	public Collection getConfigAttributeDefinitions() {

		return null;

	}



	public boolean supports(Class arg0) {

		return true;

	}



}
分享到:
评论

相关推荐

    spring-webflow-2.0.2.RELEASE

    它改进了流程定义的加载速度,提升了大型流程的处理能力,并增强了与Spring Security的整合,使得安全控制更加灵活。 四、实际应用 Spring WebFlow适用于需要复杂用户交互流程的场景,例如购物车流程、多步骤表单...

    spring-webflow-2.0.2.RELEASE.zip

    - Spring Web Flow 允许开发者通过XML配置或Java注解来定义流程。这些流程可以是简单的跳转,也可以是包含多个步骤、分支和决策的复杂流程。 - 流程定义包括开始事件、结束事件、转移动作以及可以处理用户输入和...

    javaweb项目常用jar包

    spring-security-remoting-3.1.6.RELEASE.jar spring-security-taglibs-3.1.6.RELEASE.jar spring-security-web-3.1.6.RELEASE.jar spring-test-4.1.6.RELEASE.jar spring-tx-4.1.6.RELEASE.jar spring-web-...

    Spring5SecurityMongodbTest:使用Mongodb和Security(Oauth2)模块测试Spring Boot 2和Framework 5的示例项目

    选择Gradle-&gt;现有Gradle项目在项目根目录中,设置项目的根目录结束依存关系*spring-context - 5.0.6.RELEASE*spring-data-mongodb -2.0.7.RELEASE*spring-boot-starter-web - 2.0.2.RELEASE*spring-security-oauth2...

    springcloud微服务里的oauth2集成总结.docx

    最后来看一下网关服务的安全配置代码片段,这段代码展示了如何在网关服务中启用Spring Security,并自定义安全过滤器链。 ```java @EnableWebFluxSecurity public class GatewaySecurityConfig { @Bean ...

    springBoot官方英文文档-2.0.2.RELEASE

    10. **安全**:通过`@EnableWebSecurity`和Spring Security,Spring Boot提供了一套强大的安全解决方案,包括身份验证、授权、CSRF保护等。 11. **国际化的支持**:Spring Boot通过`MessageSource`接口支持多语言,...

    Spring2.0.2 API帮助(附带样品案例war)

    6. **Spring Security**:尽管压缩包中没有完整的Spring Security 2.0.2文档,但这个标签暗示了安全功能的存在。Spring Security为应用程序提供了一套全面的安全解决方案,包括身份验证、授权、会话管理等。 7. **...

    java spring boot springboot 后台管理框架源码程序 源代码(内含部署文档及数据库)

    采用jdk1.8 + spring boot2.0.2 +springsecurity4+mysql+ mybatis + redis + layui + json + quartz +datatables。 代码实现我都采用的开源的架构,没有授权问题,因此不管是个人学习,还是公司开发,都可以放心的...

    spring mvc 教程

    4. **与Spring Security整合**:安全性的增强是Spring Web Flow 2.0的重要特点之一,通过简单的配置即可实现对用户访问权限的控制。 5. **简化配置**:官方声称2.0版本相比1.x版本减少了大约50%的XML配置代码,使得...

    keycloak应用于rest资源保护的springboot端源码

    - `demo-keycloak-2.0.2-rest`:这个目录可能包含了整个Spring Boot应用的源代码,包括启动类、配置类、REST控制器等。 - `KeycloakSecurityConfig.java`:可能是Spring Boot应用的安全配置类,这里会包含Keycloak...

    xfire开发webservice所需jar包

    1. **spring-2.0.2.jar**:Spring框架的早期版本,它提供了依赖注入、AOP(面向切面编程)以及事务管理等功能,是许多Java应用的基础,包括XFire。Spring可以帮助简化服务的配置和管理。 2. **xfire-all-1.2.6.jar*...

    spring web flow demo

    • Spring Web Flow 2.0.2 • Tomcat 6.0.0+ (为支持 EL , Tomcat 须 6.0 及以上版本) • eclipse 3.2.2+ Spring Web Flow 2.0 概述 Spring Web Flow 2.0 新特性 Spring Web Flow 是 Spring 的一个子项目,其最...

    Spring_Web_Flow_2[1].0_入门.pdf

    通过以上介绍,我们对 Spring Web Flow 2.0 有了初步的认识,并了解了其在实际开发中的应用场景。对于希望构建复杂交互式 Web 应用程序的开发者来说,Spring Web Flow 2.0 提供了一套强大的工具集。

    Spring Web Flow 2小教程

    - **安全机制**:开发者可以通过简单的配置声明某个工作流为“受保护的”,然后利用Spring Security进行访问控制。 - **安全性增强**:这极大地增强了应用的安全性,同时也简化了安全配置的工作量。 ##### 2.5 更...

    springcloudc

    2. **依赖更新**:SpringCloud 2.0.2基于Spring Boot 2.x,这可能会导致一些依赖项的更新,如Spring Security的升级,需要开发者注意潜在的API变化。 3. **配置API**:可能有一些配置API的变化,例如获取配置的方式...

    Java Appfuse-源代码分析-综合文档

    - Acegi(现已被 Spring Security 吸收)提供身份验证和授权服务,通过配置 SecurityContext 插件和访问决策管理器来保护应用程序的资源。 5. **核心代码分析** - Appfuse 的核心代码包含了很多实用工具类、服务...

Global site tag (gtag.js) - Google Analytics