`

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

阅读更多

使用了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  

使用了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 view plaincopy to clipboardprint?
<PRE class=java name="code">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;  
 
    }  
 
 
 
}</

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/wmj2003/archive/2008/07/01/2601016.aspx

分享到:
评论

相关推荐

    springsecurity使用配置详解

    在提供的压缩包`springsecurity配置demo`中,你将找到示例代码和详细说明,这将帮助你更好地理解和实践上述概念。通过学习和实践这些示例,你将能够为自己的Spring应用程序构建强大的安全防护。

    SpringBoot+SpringSecurity处理Ajax登录请求问题(推荐)

    SpringBoot+SpringSecurity处理Ajax登录请求问题 ...使用SpringBoot+SpringSecurity处理Ajax登录请求问题需要我们了解SpringBoot、SpringSecurity、MyBatis等技术框架,并掌握相关的配置和实现细节。

    spring-security3 配置和使用

    Spring Security 3 配置和使用 Spring Security 是一个强大且灵活的安全框架,旨在保护基于 Java 的 Web 应用程序。Spring Security 3 是 Spring Security 框架的第三个主要版本,提供了许多新的功能和改进。下面...

    Spring Security in Action

    Spring Security 实践指南 ...* 高度可配置性:Spring Security 的配置项非常灵活,可以根据实际需求进行配置。 Spring Security 是一个功能强大且灵活的安全框架,广泛应用于 Java 应用开发中。

    spring security3配置和使用实例+教程

    教程文档`教你使用_SpringSecurity_3.0_52页.pdf`会详细指导你如何一步步配置和使用Spring Security。它应该包含了配置文件的示例、如何集成到Spring应用中、如何创建自定义认证逻辑以及如何进行授权设置等内容。...

    SpringSecurity.pdf

    在使用Spring Security时,开发者需要熟悉它的相关Maven依赖,这些依赖是Spring Security框架与应用程序集成的基础。通过配置Maven坐标,开发者可以在项目中引入Spring Security,从而开始安全功能的配置与开发。...

    Spring Security 资料合集

    这三份资料——"实战Spring Security 3.x.pdf"、"Spring Security 3.pdf" 和 "Spring Security使用手册.pdf" 将深入探讨这些概念,并提供实践指导,帮助读者掌握如何在实际项目中应用Spring Security。通过学习这些...

    spring security2配置

    在这个"Spring Security2配置"的主题中,我们将深入探讨如何配置Spring Security来保护我们的应用程序,以及它的一些核心概念。 首先,让我们理解Spring Security的基本组件。`Users.java`、`Roles.java`暗示了用户...

    spring security 使用及配置

    Spring Security 使用及配置 Spring Security 是一个基于 Java 的安全框架,提供了丰富的安全功能,包括身份验证、授权、加密、会话管理等。下面将对 Spring Security 的使用及配置进行详细介绍。 身份验证 身份...

    SpringSecurity笔记,编程不良人笔记

    在本笔记中,我们将深入探讨SpringSecurity的核心概念、配置以及如何与SpringBoot结合使用。 1. **SpringSecurity核心概念** - **Filter Chain**: SpringSecurity通过一系列过滤器实现其安全功能,这些过滤器构成...

    spring security3.0所需要的最精简的jar包

    而`spring-security-config`是配置必不可少的部分,通常都会一起使用。 在实际开发中,除了这些jar包,可能还需要根据具体需求引入Spring Framework的核心库和其他相关的依赖。比如,如果你使用的是Spring Boot,...

    springsecurity学习笔记

    在"springsecurity学习笔记"中,你可能会涉及以下主题: - Spring Security的基本配置,包括web安全配置和全局安全配置。 - 如何自定义认证和授权流程,比如实现自定义的AuthenticationProvider和...

    Spring Cloud Gateway 整合 Spring Security 统一登录认证鉴权

    2. **配置Spring Security**:我们需要在Spring Cloud Gateway项目中引入Spring Security依赖,并配置相关的安全配置类。这包括定义认证和授权的规则,例如基于JWT(JSON Web Tokens)的认证,或者基于OAuth2的授权...

    Spring Security 基本使用和配置代码

    本教程将深入探讨Spring Security的基本使用和配置代码,帮助你理解和实践这个框架。 首先,Spring Security的核心功能包括用户身份验证、权限控制以及安全相关的会话管理。在开始配置之前,确保你的项目已经集成了...

    spring security 完整项目实例

    Spring Security 是一个强大的安全框架,用于为Java应用提供身份验证和授权服务。在这个完整的项目实例中,我们将深入探讨Spring Security的核心概念以及如何将其应用于实际的Web应用程序开发。 首先,我们从用户、...

    spring-security多登录页面配置

    ### Spring Security 多登录页面配置详解 在许多大型企业级应用中,为了更好地实现权限管理和用户体验,往往会采用多个登录页面的方式来进行用户身份验证。这种方式能够有效地将不同类型的用户(如前台用户、后台...

    SpringBoot+SpringSecurity+WebSocket

    在IT行业中,SpringBoot、SpringSecurity和WebSocket是三个非常重要的技术组件,它们分别在应用程序开发、安全管理和实时通信方面发挥着关键作用。本项目结合这三个技术,构建了一个整合的示例,旨在展示如何在...

    spring security3 中文版本

    自此之后,Spring Security 成为了 Spring 生态系统中的一个重要组成部分,不断迭代更新,以适应不断变化的安全需求和技术发展。 ##### 1.3 发行版本号 Spring Security 3.0.1 是在 Spring Security 3.0 的基础上...

    spring cloud2.0 eureka server spring security配置

    在Spring Cloud 2.0版本中,Eureka Server的配置相比1.x版本确实有了一些显著的变化,尤其是在结合Spring Security进行安全设置时。Spring Cloud Eureka是Netflix Eureka的Spring Boot实现,它为微服务架构提供了...

    spring spring security2.5 jar

    2. **配置文件**:在Spring的XML配置文件中,需要添加Spring Security的相关配置,例如定义安全拦截器、认证提供者、访问决策策略等。 3. **代码集成**:在业务代码中,可以通过`@Secured`注解来标记需要权限控制的...

Global site tag (gtag.js) - Google Analytics