使用了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 Security的整合,使得安全控制更加灵活。 四、实际应用 Spring WebFlow适用于需要复杂用户交互流程的场景,例如购物车流程、多步骤表单...
- Spring Web Flow 允许开发者通过XML配置或Java注解来定义流程。这些流程可以是简单的跳转,也可以是包含多个步骤、分支和决策的复杂流程。 - 流程定义包括开始事件、结束事件、转移动作以及可以处理用户输入和...
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-...
选择Gradle->现有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...
最后来看一下网关服务的安全配置代码片段,这段代码展示了如何在网关服务中启用Spring Security,并自定义安全过滤器链。 ```java @EnableWebFluxSecurity public class GatewaySecurityConfig { @Bean ...
10. **安全**:通过`@EnableWebSecurity`和Spring Security,Spring Boot提供了一套强大的安全解决方案,包括身份验证、授权、CSRF保护等。 11. **国际化的支持**:Spring Boot通过`MessageSource`接口支持多语言,...
6. **Spring Security**:尽管压缩包中没有完整的Spring Security 2.0.2文档,但这个标签暗示了安全功能的存在。Spring Security为应用程序提供了一套全面的安全解决方案,包括身份验证、授权、会话管理等。 7. **...
采用jdk1.8 + spring boot2.0.2 +springsecurity4+mysql+ mybatis + redis + layui + json + quartz +datatables。 代码实现我都采用的开源的架构,没有授权问题,因此不管是个人学习,还是公司开发,都可以放心的...
4. **与Spring Security整合**:安全性的增强是Spring Web Flow 2.0的重要特点之一,通过简单的配置即可实现对用户访问权限的控制。 5. **简化配置**:官方声称2.0版本相比1.x版本减少了大约50%的XML配置代码,使得...
- `demo-keycloak-2.0.2-rest`:这个目录可能包含了整个Spring Boot应用的源代码,包括启动类、配置类、REST控制器等。 - `KeycloakSecurityConfig.java`:可能是Spring Boot应用的安全配置类,这里会包含Keycloak...
1. **spring-2.0.2.jar**:Spring框架的早期版本,它提供了依赖注入、AOP(面向切面编程)以及事务管理等功能,是许多Java应用的基础,包括XFire。Spring可以帮助简化服务的配置和管理。 2. **xfire-all-1.2.6.jar*...
• 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.0 有了初步的认识,并了解了其在实际开发中的应用场景。对于希望构建复杂交互式 Web 应用程序的开发者来说,Spring Web Flow 2.0 提供了一套强大的工具集。
- **安全机制**:开发者可以通过简单的配置声明某个工作流为“受保护的”,然后利用Spring Security进行访问控制。 - **安全性增强**:这极大地增强了应用的安全性,同时也简化了安全配置的工作量。 ##### 2.5 更...
2. **依赖更新**:SpringCloud 2.0.2基于Spring Boot 2.x,这可能会导致一些依赖项的更新,如Spring Security的升级,需要开发者注意潜在的API变化。 3. **配置API**:可能有一些配置API的变化,例如获取配置的方式...
- Acegi(现已被 Spring Security 吸收)提供身份验证和授权服务,通过配置 SecurityContext 插件和访问决策管理器来保护应用程序的资源。 5. **核心代码分析** - Appfuse 的核心代码包含了很多实用工具类、服务...