`
mengqingyu
  • 浏览: 333083 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

spring-security3(一)配置详解及API扩展(包含ajax返回)

阅读更多
最近对spring-security3做了一些初步了解,搜集了一些配置资料,整理如下:

1、在spring-security官网下载最新jar然后拷贝jar到项目的lib下。

2、然后在web.xml中添加配置,内容如下:
	<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>
	

3、xml配置,配置内容如下:
<?xml version="1.0" encoding="UTF-8"?>

<b:beans xmlns="http://www.springframework.org/schema/security"
	xmlns:b="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-3.0.xsd
		http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.0.xsd">

	<!-- auto-config = true 则使用from-login. 如果不使用该属性 则默认为http-basic(没有session).access-denied-page:出错后跳转到的错误页面;-->
	
	<!-- intercept-url:拦截器,可以设定哪些路径需要哪些权限来访问. filters=none 不使用过滤,也可以理解为忽略 -->  
	<http realm="Contacts Realm" auto-config="true">
		<anonymous granted-authority="IS_AUTHENTICATED_ANONYMOUSLY"/>
		<intercept-url pattern="/" access="IS_AUTHENTICATED_ANONYMOUSLY" />
		<intercept-url pattern="/favicon.ico" filters="none" />
		<intercept-url pattern="/images/**" filters="none" />
		<intercept-url pattern="/css/**" filters="none" />
		<intercept-url pattern="/js/**" filters="none" />
		<intercept-url pattern="/login*" access="IS_AUTHENTICATED_ANONYMOUSLY" />
		<intercept-url pattern="/sysmanage/ug/useradd/loginSys" access="IS_AUTHENTICATED_ANONYMOUSLY" />
		<intercept-url pattern="/debug*" access="ROLE_ADMINISTRATOR" />

		<!-- 
			session-management是针对session的管理. 这里可以不配置. 如有需求可以配置.
			id登陆唯一.后登陆的账号会挤掉第一次登陆的账号 error-if-maximum-exceeded="true"禁止2次登陆;
			session-fixation-protection="none" 防止伪造sessionid攻击.用户登录成功后会销毁用户当前的session.
			创建新的session,并把用户信息复制到新session中.        
	        <session-management session-fixation-protection="none"><concurrency-control/></session-management>  
        --> 
		
		<!-- login-page:默认指定的登录页面.authentication-failure-url:出错后跳转页面.default-target-url:成功登陆后跳转页面 -->  
		<form-login login-page="/login" login-processing-url="/j_spring_security_check" authentication-success-handler-ref="logAuthenticationSuccessHandler"
			default-target-url="/manage" authentication-failure-url="/login?login_error=1" />
		<http-basic />
		<!-- logout-success-url:成功注销后跳转到的页面; -->
		<logout logout-success-url="/manage" />
		<remember-me />
		<!-- 自定义权限过滤器链 需要实例化过滤器 --> 
		<!-- 可选、自定义用户退出-->
		<custom-filter ref="ajaxLogoutFilter" before="LOGOUT_FILTER" />
		<!-- 可选、自定义表单验证 ajax返回,带参数-->
		<custom-filter ref="ajaxUsernamePasswordAuthenticationFilter" before="FORM_LOGIN_FILTER" />
		<!-- 地址拦截 -->
		<custom-filter ref="dbFilterSecurityInterceptor" before="FILTER_SECURITY_INTERCEPTOR" />
	</http>
	
	<!-- 可选、日志 需要继承 SavedRequestAwareAuthenticationSuccessHandler-->
    <b:bean id="logAuthenticationSuccessHandler" class="com.demo.security.LogAuthenticationSuccessHandler"/>

    <!-- 权限管理器,全局唯一 -->
	<authentication-manager alias="authenticationManager">
		<!--userManageService为自定义bean注入需要自定义实现UserDetailsService接口重写loadUserByUsername方法 -->
		<authentication-provider user-service-ref="userManageService">
			<password-encoder hash="md5" >
				<salt-source user-property="username"/>
			</password-encoder>
		</authentication-provider>
	</authentication-manager>

	<!-- Automatically receives AuthenticationEvent messages -->
	<b:bean id="loggerListener" class="org.springframework.security.authentication.event.LoggerListener" />

	<!-- 可选、ajax 登录验证器,通过自定义地址拦截,进行验证,需继承UsernamePasswordAuthenticationFilter,重写attemptAuthentication方法 -->
	<b:bean id="ajaxUsernamePasswordAuthenticationFilter" class="com.demo.security.AjaxUsernamePasswordAuthenticationFilter">
		<b:property name="filterProcessesUrl" value="/j_ajax_security_check"/> <!-- 自定义表单提交地址,和JSP页面表单地址对应 -->
		<b:property name="authenticationManager" ref="authenticationManager"/>
        <b:property name="authenticationSuccessHandler" ref="ajaxSuccessHandler"/>
		<b:property name="authenticationFailureHandler" ref="ajaxFailureHandler"/>
	</b:bean>
	
	<!-- 可选、ajax 用户退出,通过自定义地址拦截,需继承LogoutFilter,重写AjaxLogoutFilter,doFilter方法 -->
	<b:bean id="ajaxLogoutFilter" class="com.berheley.bi.grp.security.AjaxLogoutFilter">
		<b:constructor-arg ref="ajaxLogoutSuccessHandler"/>
		<b:constructor-arg>  
            <b:list>  
            	<b:bean class="org.springframework.security.web.authentication.logout.SecurityContextLogoutHandler"/><!-- 默认类,清空session数据 -->
            </b:list>  
        </b:constructor-arg>
		<b:property name="filterProcessesUrl" value="/j_ajax_security_logout"/> <!-- 自定义退出地址,和JSP页面地址对应 -->
	</b:bean>
	
	<!-- 可选、扩展成功返回方式,需实现LogoutSuccessHandler -->
	<b:bean id="ajaxLogoutSuccessHandler" class="com.berheley.bi.grp.security.AjaxLogoutSuccessHandler"/> 
	<!-- 可选、扩展成功返回方式,需实现AuthenticationSuccessHandler或继承SimpleUrlAuthenticationSuccessHandler -->
	<b:bean id="ajaxSuccessHandler" class="com.demo.security.AjaxAuthenticationSuccessHandler"/>  
    <!-- 可选、扩展失败返回方式,需实现AuthenticationFailureHandler或继承SimpleUrlAuthenticationFailureHandler -->
    <b:bean id="ajaxFailureHandler" class="com.demo.security.AjaxAuthenticationFailureHandler"/>  
	
	<!-- 需要实现FilterInvocationSecurityMetadataSource 或继承 DefaultFilterInvocationSecurityMetadataSource 实现资源和角色的匹配验证 -->
	<b:bean id="dbSecurityMetadataSource" class="com.demo.security.DbSecurityMetadataSource">
		<b:property name="userService" ref="userManageService"/>
	</b:bean>
	
	<!-- 访问控制验证器Authority -->
	<b:bean id="dbFilterSecurityInterceptor" class="org.springframework.security.web.access.intercept.FilterSecurityInterceptor">
		<b:property name="authenticationManager" ref="authenticationManager"/>
     	<b:property name="accessDecisionManager" ref="accessDecisionManager"/>
     	<b:property name="objectDefinitionSource" ref="dbSecurityMetadataSource"/>
     	<b:property name="observeOncePerRequest" value="false"/>
     	<b:property name="alwaysReauthenticate" value="false"/>
	</b:bean>
	
	<!-- 
		httpRequestAccessDecisionManager(投票通过策略管理器)用于管理投票通过策略。Acegi提供三种投票通过策略的实现:
		 AffirmativeBased(至少一个投票者同意方可通过),ConsensusBased(多数投票者同意方可通过),UnanimousBased(所有投
		 票者同意方可通过) 
		 allowIfAllAbstainDecisions : 设定是否允许:“没人反对就通过”的投票策略
		 decisionVoters : 投票者
	-->
	<b:bean id="accessDecisionManager" class="org.springframework.security.access.vote.AffirmativeBased">
		<b:property name="allowIfAllAbstainDecisions" value="false"/>
		<b:property name="decisionVoters">
			<b:list>
				<!--必须是以rolePrefix设定的ROLE_开头的才会进行投票,否则为弃权-->
				<b:bean class="org.springframework.security.access.vote.AuthenticatedVoter"/>
				<b:bean class="org.springframework.security.access.vote.RoleVoter">
					<b:property name="rolePrefix" value="HY_"/>
				</b:bean>
				<!--扩展投票器,继承RoleVoter-->
				<b:bean class="com.demo.security.AnyRoleVote">
					<b:property name="rolePrefix" value="AUTH_"/>
				</b:bean>
			</b:list>
		</b:property>
	</b:bean>
</b:beans>

j_spring_security_check : 验证管理器拦截地址默认值;
j_username: 验证用户名;
j_password: 验证密码;
_spring_security_remember_me:记住密码

需了解原理请参阅security源码分析:http://mengqingyu.iteye.com/blog/1477561
分享到:
评论

相关推荐

    Spring Boot + Vue3 完整开发全栈项目附资料.zip

    《Spring Boot + Vue3 全栈开发详解及实践指南》 在现代Web开发领域,Spring Boot和Vue3已经成为构建高效、可扩展应用的热门选择。本项目实战将深入讲解如何结合这两个强大的技术栈,实现一个全栈应用。下面,我们...

    spring.zip

    在实际开发中,我们可能还会涉及到Spring Security来处理用户认证和授权,以及Spring MVC用于构建RESTful风格的API接口。此外,Spring Boot可以简化项目的初始化和配置,Spring Cloud则可以帮助我们构建微服务架构,...

    Java Spring开发电商完整平台

    3. 安全控制:Spring Security是Spring框架的一部分,它提供了强大的安全控制功能。在电商平台上,用户认证(登录)、授权(权限控制)和会话管理至关重要,Spring Security可以帮助我们实现这些功能。 4. 消息队列...

    基于SpringBoot2.0的后台权限管理系统界面简洁美观敏捷开发系统架构

    综上所述,该后台权限管理系统结合了SpringBoot2.0的便捷性、Spring Security的安全性、Dubbo的服务治理能力以及MySQL的数据持久化,是一个适用于敏捷开发的优秀示例。通过对源码的深入学习和研究,开发者不仅可以...

    spring boot vue 博客

    【Spring Boot Vue 博客系统开发详解】 在现代Web应用开发中,Spring Boot与Vue.js的结合成为了一种高效、便捷的解决方案。本项目“Spring Boot Vue 博客”就是一个典型的例子,它融合了Java后端技术和前端Vue.js...

    Spring Boot + Vue 前后端分离的人力资源管理项目

    《Spring Boot + Vue 实现的人力资源管理项目详解》 在现代企业信息化进程中,人力资源管理系统(HRM)扮演着至关重要的角色。本项目基于Spring Boot和Vue.js技术栈,实现了一个前后端分离的企业级人力资源管理解决...

    毕业设计基于Spring boot + vue的企业工单管理系统源代码+数据库

    《基于Spring Boot + Vue的企业工单管理系统开发详解》 在当今信息化时代,企业对高效、智能化的工单管理系统的需求日益增长。本项目“基于Spring Boot + Vue的企业工单管理系统”结合了Spring Boot的强大后端框架...

    SpringBoot汽车租赁系统-Car Rental Management On Spring Boot.zip

    3. **数据库设计**:系统可能包含用户信息、车辆信息、租赁记录等多个数据表,使用Spring Data JPA进行数据持久化。JPA(Java Persistence API)是Java平台上的ORM(对象关系映射)标准,它允许开发者以面向对象的...

    java毕设:办公自动化系统-springboot+vue+element-ui 前后端分离.zip

    《基于SpringBoot+Vue+Element-UI的办公自动化系统实现详解》 办公自动化系统是现代企业信息化建设的重要组成部分,它能够提升工作效率,简化工作流程,实现文档管理、任务分配、协同工作等功能。本项目采用...

    基于SpringMVC的设备管理信息系统.zip

    【SpringMVC设备管理信息系统详解】 本项目是一个基于SpringMVC框架的信息管理系统,主要用于设备的管理,涵盖了设备的增删改查、状态监控、维护记录等功能。SpringMVC是Spring框架的一部分,它提供了模型-视图-...

    Springboot+vue的共享汽车管理系统(有报告),Javaee项目,springboot vue前后端分离项目

    前后端分离的核心在于,前端通过Ajax技术向后端发送请求获取数据,后端则专注于业务逻辑处理和数据管理,返回JSON格式的数据。这种模式提高了开发效率,使得前后端可以独立开发和测试。 4. **共享汽车管理系统的...

    dwzteam-dwz_jui-master_java_

    **DWZ富客户端框架(jQuery RIA framework)详解** DWZ富客户端框架,全称为DWZ UI,是一款基于JavaScript和jQuery库开发的轻量级、高性能的Web应用程序用户界面框架。该框架专为构建Rich Internet Applications ...

    Java面试框架高频问题2019

    Spring Boot采用了一种初始即配置的思想,很多集成内容都无需配置。 **2.SpringBoot有哪些优点?** - 自动配置:减少了大量的XML配置文件。 - 嵌入式服务器:可直接使用内嵌的Tomcat、Jetty或Undertow等服务器。 -...

    DWR中文文档.pdf

    #### 三、DWR配置详解 **2.1 主要配置** 在`web.xml`中配置DWR过滤器是最基本的步骤之一,这包括定义DWR的初始化参数。 **2.2 常用&lt;init-param&gt;参数列表** - **2.2.1 安全参数** 这些参数用于控制DWR的安全性,...

    Onboard插件编程指南1

    - **WEB-INF**:存放Spring的配置文件,如applicationContext.xml、applicationOSGI.xml、applicationSecurity.xml、dispatcher-servlet.xml和web.xml,分别处理Bean声明、OSGI服务引用、安全认证和Web配置。...

    应届生毕业设计--旅游网站(前台+后台)

    5. **前后端交互**:项目中,前端使用AJAX或者Fetch API与后端进行异步通信,实现无刷新的数据更新,提高用户体验。例如,用户搜索旅游产品时,前端发送请求,后端返回相关数据并动态渲染在页面上。 6. **RESTful ...

    SSM+easyUI整合详解

    3. **Spring整合MyBatis**:通过Spring的SqlSessionTemplate或MyBatis的SqlSessionFactoryBean来管理SqlSession,实现DAO的自动化。 4. **引入EasyUI库**:在Web应用的静态资源目录下添加EasyUI的CSS和JS文件,确保...

    Springboot开发的客户关系管理系统.rar

    2. RESTful API:利用Spring Web MVC或Spring WebFlux创建RESTful服务,实现前后端分离,提高系统的可扩展性和灵活性。 3. 安全管理:Spring Security提供身份验证和授权机制,保护系统资源,防止未授权访问。 4. ...

    精选_基于Springboot和Redis实现的在线选课系统_源码打包

    3. RESTful API支持:Spring Boot支持创建RESTful风格的API,方便前后端分离,提高系统的可扩展性和灵活性。 三、Redis简介 Redis是一款高性能的键值对内存数据库,常用于缓存、消息队列等场景。它的优点包括高速...

    基于springboot的旅游信息管理系统.zip

    SpringBoot集成了Spring Security,提供了一套完整的安全解决方案,包括身份验证、授权、CSRF保护等。开发者可以根据需求轻松定制安全策略。 6. **前端技术选型** 前端通常采用现代化的JavaScript框架,如React或...

Global site tag (gtag.js) - Google Analytics