`
youyun_2008
  • 浏览: 114529 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

spring security 配置

阅读更多
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 cloud2.0 eureka server spring security配置

    以上就是关于Spring Cloud 2.0中Eureka Server与Spring Security配置的相关知识点。通过这些配置,你可以确保Eureka Server的数据安全,防止未授权的访问。在实际项目中,还需要根据具体的业务需求进行调整和优化。

    spring security配置实例

    ### Spring Security配置实例详解 #### 一、Spring Security简介与应用场景 Spring Security 是一个功能强大的安全框架,提供了全面的安全服务,支持认证、授权以及其他安全服务。它为开发人员提供了高度可定制化...

    springsecurity使用配置详解

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

    Restful风格服务端应用的Spring Boot + Spring Security配置

    这篇博客将深入探讨如何配置Spring Boot与Spring Security,以创建一个安全的RESTful服务。 首先,我们需要理解Spring Boot的核心特性,它简化了Spring应用程序的初始化和配置过程。通过自动配置和起步依赖,Spring...

    SPRING SECURITY配置

    **Spring Security配置详解** Spring Security是一款强大的安全框架,它为Java应用提供了全面的安全服务,包括认证、授权和访问控制。本文将深入探讨Spring Security的核心概念、配置方式以及常见应用场景。 ### 1...

    Spring Security 配置实例XML文件

    Spring Security 配置实例XML文件

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

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

    详解spring security 配置多个AuthenticationProvider

    Spring Security 配置多个 AuthenticationProvider 详解 Spring Security 是一个功能强大且灵活的安全框架,提供了多种身份验证机制和访问控制机制。在实际开发中,我们经常需要配置多个身份验证提供程序...

    26.JavaWeb-SpringSecurity安全框架-SpringSecurity配置类

    SpringSecurity配置类

    spring security 配置(含源码)

    了解了这些核心概念后,你可以通过`springsecurity-sample`项目中的代码实践,进一步熟悉Spring Security的配置和使用。这个项目可能包含了一个简单的Spring Boot应用,其中已经集成了Spring Security,并提供了一些...

    SpringSecurity笔记,编程不良人笔记

    在`SpringSecurity.md`和`SpringSecurity.pdf`文档中,可能包含SpringSecurity配置、自定义用户服务、授权策略等方面的代码示例。`codes`目录可能包含实际运行的项目代码,方便读者实践和理解。 8. **图笔记.draw...

    spring-security多登录页面配置

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

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

    SpringBoot+SpringSecurity处理Ajax登录请求问题 SpringBoot+SpringSecurity处理Ajax登录请求问题是SpringBoot开发中的一個常见问题,本文将详细介绍如何使用SpringBoot+SpringSecurity处理Ajax登录请求问题。 ...

    java学习之SpringSecurity配置了登录链接无权限

    我们在使用SpringSecurity作为后台权限框架的时候,框架给我们提供了配置登录请求的接口,供我们配置登录链接,当我们配置了登录链接地址后,前端访问登陆请求的时候显示无权限。 异常分析 由于SpringSecurity的...

    spring security 2 配置说明

    - **配置**:这是Spring Security配置中最核心的部分,通过`&lt;http&gt;`元素可以定义哪些URL需要进行身份验证和授权。`auto-config='true'`属性表示自动配置,简化了配置过程。`&lt;intercept-url&gt;`元素用于指定特定URL的...

    Spring Security 配置

    介绍了Spring Security 的配置方法及其使用技巧

    Spring Security 基本使用和配置代码

    这是自定义Spring Security配置的主要地方。你可以重写`configure(HttpSecurity http)`方法来定义HTTP安全规则。 ```java @Configuration @EnableWebSecurity public class SecurityConfig extends ...

    精彩:Spring Security 演讲PPT

    3. **定义安全规则**: 在Spring Security配置文件中定义具体的认证和授权规则,如使用数据库存储用户信息、使用自定义登录页面等。 #### 四、Spring Security 2.x 概览 Spring Security 2.x不仅提供了强大的功能...

    spring-security 官方文档 中文版

    - **Config (spring-security-config.jar)**:提供了配置 Spring Security 的 XML 命名空间支持。 - **LDAP (spring-security-ldap.jar)**:提供了 LDAP 目录服务支持。 - **ACL (spring-security-acl.jar)**:...

    SpringSecurity入门小demo(SSM+Spring Security)

    在 `HelloSpringSecurity` 文件中,你可能看到以下关键代码: - **WebSecurityConfigurerAdapter** 类:这是 Spring Security 提供的配置适配器,可以覆盖其方法来定制安全规则。 - `configure(HttpSecurity http)...

Global site tag (gtag.js) - Google Analytics