web.xml
DelegatingFilterProxy只是代理Spring容器中FilterChainProxy. 截到请求后转给后者处理。
<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>
SpringSecurityContext.xml:
<!--
<http>元素封装了安全性配置,它创建了一个名为"SpringSecurityFilterChain"的FilterChainProxy bean,这个bean维护了一系列的建立了web安全配置得安全过滤器。
-->
<http auto-config="false"
access-denied-page="/accessDenied.jsp"
<!--相当于下面的 <form-login/>
entry-point-ref="authenticationProcessingFilterEntryPoint"-->
>
<intercept-url pattern="/javascript/**" access="ROLE_READ" />
<intercept-url pattern="/images/**" access="ROLE_READ" />
<intercept-url pattern="/listUsers.do" access="ROLE_READ" />
<intercept-url pattern="/userManagement.do" access="ROLE_ADMIN"/>
<logout logout-success-url="/"/>
<remember-me/>
<form-login login-page="/" authentication-failure-url="/?error=true" default-target-url="/home.do" />
<!--<concurrent-session-control max-sessions="1" exception-if-maximum-exceeded="false" expired-url="/?error=true"/>
-->
</http>
<!-- 另一种设置登录页面的方法, 除了上面的<form-login/> -->
<!--
<beans:bean id="authenticationProcessingFilterEntryPoint" class="org.springframework.security.ui.webapp.AuthenticationProcessingFilterEntryPoint">
<beans:property name="loginFormUrl" value="/login.jsp"/>
</beans:bean>
-->
<!--其中UserDetailsSerivceImpl实现了UserDetailsService接口,重写了UserDetails loadUserByUsername(name) 方法。-->
<beans:bean id="userDetailsService" class="com.test.security.UserDetailsSerivceImpl" />
<authentication-provider user-service-ref="userDetailsService">
<password-encoder hash="md5">
<salt-source user-property="username"/>
</password-encoder>
</authentication-provider>
<!--<authentication-manager/>隐藏了providers属性的注入,实际注入了<authentication-provider/> -->
<authentication-manager alias="authenticationManager"/>
上面的配置,分为两个方向:
1)User--->Role(Authencation)
上面通过<authentication-manage/>来实现,再通过UserDetailsService来获得具体的验证。
也可以另一种简单配置的方法:
<authencation-provider>
<user-service>
<user name="" pswd="" authorities="xxxRole"/>
...
</user-service>
</authencation-provide>
2)Resource---->Role(Authorization)
上面通过<http>中<intercept-url/>进行配置。
也可以使用另一种复杂配置:
通过FilterSecurityInterceptor作为过滤器链中一个元素而进行配置。
<Custom-filter>用来设定该过滤器的位置。
<beans:bean id="accessDecisionManager" class="org.springframework.security.vote.AffirmativeBased">
<beans:property name="allowIfAllAbstainDecisions" value="false"/>
<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="resourceSecurityInterceptor" class="org.springframework.security.intercept.web.FilterSecurityInterceptor">
<beans:property name="validateConfigAttributes" value="false" />
<beans:property name="authenticationManager" ref="authenticationManager"/>
<beans:property name="accessDecisionManager" ref="accessDecisionManager"/>
<beans:property name="objectDefinitionSource" ref="filterInvocationDefinitionSource" />
<beans:property name="observeOncePerRequest" value="false" />
<custom-filter after="LAST" />
</beans:bean>
<beans:bean id="filterInvocationDefinitionSource" class="com.test.security.service.FilterInvocationDefinitionSourceImpl" />
其中filterInvocationDefinitionSource<-----FilterInvocationDefinitionSource<----ObjectDefinitionSource
有下面的方法需要实现:
public interface ObjectDefinitionSource{
public abstract ConfigAttributeDefinition getAttributes( Object obj )
throws IllegalArgumentException;
public abstract Collection getConfigAttributeDefinitions();
public abstract boolean supports( Class class1 );
}
实现如下:
public ConfigAttributeDefinition getAttributes(Object filter)
throws IllegalArgumentException {
FilterInvocation filterInvocation = (FilterInvocation) filter;
String requestURI = filterInvocation.getRequestUrl();
Set<String> roles = securityService.loadUrlAuthorities(requestURI);
String grantedAuthorities = StringUtils.join(roles.toArray(), ",");
if (grantedAuthorities.length() > 0) {
ConfigAttributeEditor configAttrEditor = new ConfigAttributeEditor();
configAttrEditor.setAsText(grantedAuthorities);
return (ConfigAttributeDefinition) configAttrEditor.getValue();
}
return null;
}
/**
* If available, returns all of the ConfigAttributeDefinitions defined by
* the implementing class. This is used by the AbstractSecurityInterceptor
* to perform startup time validation of each ConfigAttribute configured
* against it.
*
* @return the ConfigAttributeDefinitions or null if unsupported
* @see org.springframework.security.intercept.ObjectDefinitionSource#getConfigAttributeDefinitions()
*/
@SuppressWarnings("unchecked")
public Collection getConfigAttributeDefinitions() {
return null;
}
/**
* Indicates whether the ObjectDefinitionSource implementation is able to
* provide ConfigAttributeDefinitions for the indicated secure object type.
*
* @param clazz
* -the class that is being queried.
* @return true -if the implementation can process the indicated class
* @see org.springframework.security.intercept.ObjectDefinitionSource#supports(java.lang.Class)
*/
@SuppressWarnings("unchecked")
public boolean supports(Class clazz) {
return true;
}
pages.xml:
<form method="post" id="loginForm" action="${pageContext.request.contextPath}/j_spring_security_check">
<input class="width_200px" type="text" name="j_username" id="j_username" />
<input class="width_200px" type="password" name="j_password" id="j_password" />
<input class="button_3" type="submit" value="Log In" />
</form>
分享到:
相关推荐
以上就是关于Spring Cloud 2.0中Eureka Server与Spring Security配置的相关知识点。通过这些配置,你可以确保Eureka Server的数据安全,防止未授权的访问。在实际项目中,还需要根据具体的业务需求进行调整和优化。
### Spring Security配置实例详解 #### 一、Spring Security简介与应用场景 Spring Security 是一个功能强大的安全框架,提供了全面的安全服务,支持认证、授权以及其他安全服务。它为开发人员提供了高度可定制化...
在提供的压缩包`springsecurity配置demo`中,你将找到示例代码和详细说明,这将帮助你更好地理解和实践上述概念。通过学习和实践这些示例,你将能够为自己的Spring应用程序构建强大的安全防护。
这篇博客将深入探讨如何配置Spring Boot与Spring Security,以创建一个安全的RESTful服务。 首先,我们需要理解Spring Boot的核心特性,它简化了Spring应用程序的初始化和配置过程。通过自动配置和起步依赖,Spring...
**Spring Security配置详解** Spring Security是一款强大的安全框架,它为Java应用提供了全面的安全服务,包括认证、授权和访问控制。本文将深入探讨Spring Security的核心概念、配置方式以及常见应用场景。 ### 1...
Spring Security 配置实例XML文件
教程文档`教你使用_SpringSecurity_3.0_52页.pdf`会详细指导你如何一步步配置和使用Spring Security。它应该包含了配置文件的示例、如何集成到Spring应用中、如何创建自定义认证逻辑以及如何进行授权设置等内容。...
Spring Security 配置多个 AuthenticationProvider 详解 Spring Security 是一个功能强大且灵活的安全框架,提供了多种身份验证机制和访问控制机制。在实际开发中,我们经常需要配置多个身份验证提供程序...
SpringSecurity配置类
了解了这些核心概念后,你可以通过`springsecurity-sample`项目中的代码实践,进一步熟悉Spring Security的配置和使用。这个项目可能包含了一个简单的Spring Boot应用,其中已经集成了Spring Security,并提供了一些...
在`SpringSecurity.md`和`SpringSecurity.pdf`文档中,可能包含SpringSecurity配置、自定义用户服务、授权策略等方面的代码示例。`codes`目录可能包含实际运行的项目代码,方便读者实践和理解。 8. **图笔记.draw...
### Spring Security 多登录页面配置详解 在许多大型企业级应用中,为了更好地实现权限管理和用户体验,往往会采用多个登录页面的方式来进行用户身份验证。这种方式能够有效地将不同类型的用户(如前台用户、后台...
SpringBoot+SpringSecurity处理Ajax登录请求问题 SpringBoot+SpringSecurity处理Ajax登录请求问题是SpringBoot开发中的一個常见问题,本文将详细介绍如何使用SpringBoot+SpringSecurity处理Ajax登录请求问题。 ...
我们在使用SpringSecurity作为后台权限框架的时候,框架给我们提供了配置登录请求的接口,供我们配置登录链接,当我们配置了登录链接地址后,前端访问登陆请求的时候显示无权限。 异常分析 由于SpringSecurity的...
- **配置**:这是Spring Security配置中最核心的部分,通过`<http>`元素可以定义哪些URL需要进行身份验证和授权。`auto-config='true'`属性表示自动配置,简化了配置过程。`<intercept-url>`元素用于指定特定URL的...
介绍了Spring Security 的配置方法及其使用技巧
这是自定义Spring Security配置的主要地方。你可以重写`configure(HttpSecurity http)`方法来定义HTTP安全规则。 ```java @Configuration @EnableWebSecurity public class SecurityConfig extends ...
3. **定义安全规则**: 在Spring Security配置文件中定义具体的认证和授权规则,如使用数据库存储用户信息、使用自定义登录页面等。 #### 四、Spring Security 2.x 概览 Spring Security 2.x不仅提供了强大的功能...
- **Config (spring-security-config.jar)**:提供了配置 Spring Security 的 XML 命名空间支持。 - **LDAP (spring-security-ldap.jar)**:提供了 LDAP 目录服务支持。 - **ACL (spring-security-acl.jar)**:...
在 `HelloSpringSecurity` 文件中,你可能看到以下关键代码: - **WebSecurityConfigurerAdapter** 类:这是 Spring Security 提供的配置适配器,可以覆盖其方法来定制安全规则。 - `configure(HttpSecurity http)...