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

xiaoxiao2022-06-11  29

使用了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;         }         }</

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

转载请注明原文地址: https://www.6miu.com/read-4931391.html

最新回复(0)