最近对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 全栈开发详解及实践指南》 在现代Web开发领域,Spring Boot和Vue3已经成为构建高效、可扩展应用的热门选择。本项目实战将深入讲解如何结合这两个强大的技术栈,实现一个全栈应用。下面,我们...
在实际开发中,我们可能还会涉及到Spring Security来处理用户认证和授权,以及Spring MVC用于构建RESTful风格的API接口。此外,Spring Boot可以简化项目的初始化和配置,Spring Cloud则可以帮助我们构建微服务架构,...
3. 安全控制:Spring Security是Spring框架的一部分,它提供了强大的安全控制功能。在电商平台上,用户认证(登录)、授权(权限控制)和会话管理至关重要,Spring Security可以帮助我们实现这些功能。 4. 消息队列...
综上所述,该后台权限管理系统结合了SpringBoot2.0的便捷性、Spring Security的安全性、Dubbo的服务治理能力以及MySQL的数据持久化,是一个适用于敏捷开发的优秀示例。通过对源码的深入学习和研究,开发者不仅可以...
【Spring Boot Vue 博客系统开发详解】 在现代Web应用开发中,Spring Boot与Vue.js的结合成为了一种高效、便捷的解决方案。本项目“Spring Boot Vue 博客”就是一个典型的例子,它融合了Java后端技术和前端Vue.js...
《Spring Boot + Vue 实现的人力资源管理项目详解》 在现代企业信息化进程中,人力资源管理系统(HRM)扮演着至关重要的角色。本项目基于Spring Boot和Vue.js技术栈,实现了一个前后端分离的企业级人力资源管理解决...
《基于Spring Boot + Vue的企业工单管理系统开发详解》 在当今信息化时代,企业对高效、智能化的工单管理系统的需求日益增长。本项目“基于Spring Boot + Vue的企业工单管理系统”结合了Spring Boot的强大后端框架...
3. **数据库设计**:系统可能包含用户信息、车辆信息、租赁记录等多个数据表,使用Spring Data JPA进行数据持久化。JPA(Java Persistence API)是Java平台上的ORM(对象关系映射)标准,它允许开发者以面向对象的...
《基于SpringBoot+Vue+Element-UI的办公自动化系统实现详解》 办公自动化系统是现代企业信息化建设的重要组成部分,它能够提升工作效率,简化工作流程,实现文档管理、任务分配、协同工作等功能。本项目采用...
【SpringMVC设备管理信息系统详解】 本项目是一个基于SpringMVC框架的信息管理系统,主要用于设备的管理,涵盖了设备的增删改查、状态监控、维护记录等功能。SpringMVC是Spring框架的一部分,它提供了模型-视图-...
前后端分离的核心在于,前端通过Ajax技术向后端发送请求获取数据,后端则专注于业务逻辑处理和数据管理,返回JSON格式的数据。这种模式提高了开发效率,使得前后端可以独立开发和测试。 4. **共享汽车管理系统的...
**DWZ富客户端框架(jQuery RIA framework)详解** DWZ富客户端框架,全称为DWZ UI,是一款基于JavaScript和jQuery库开发的轻量级、高性能的Web应用程序用户界面框架。该框架专为构建Rich Internet Applications ...
Spring Boot采用了一种初始即配置的思想,很多集成内容都无需配置。 **2.SpringBoot有哪些优点?** - 自动配置:减少了大量的XML配置文件。 - 嵌入式服务器:可直接使用内嵌的Tomcat、Jetty或Undertow等服务器。 -...
#### 三、DWR配置详解 **2.1 主要配置** 在`web.xml`中配置DWR过滤器是最基本的步骤之一,这包括定义DWR的初始化参数。 **2.2 常用<init-param>参数列表** - **2.2.1 安全参数** 这些参数用于控制DWR的安全性,...
- **WEB-INF**:存放Spring的配置文件,如applicationContext.xml、applicationOSGI.xml、applicationSecurity.xml、dispatcher-servlet.xml和web.xml,分别处理Bean声明、OSGI服务引用、安全认证和Web配置。...
5. **前后端交互**:项目中,前端使用AJAX或者Fetch API与后端进行异步通信,实现无刷新的数据更新,提高用户体验。例如,用户搜索旅游产品时,前端发送请求,后端返回相关数据并动态渲染在页面上。 6. **RESTful ...
3. **Spring整合MyBatis**:通过Spring的SqlSessionTemplate或MyBatis的SqlSessionFactoryBean来管理SqlSession,实现DAO的自动化。 4. **引入EasyUI库**:在Web应用的静态资源目录下添加EasyUI的CSS和JS文件,确保...
2. RESTful API:利用Spring Web MVC或Spring WebFlux创建RESTful服务,实现前后端分离,提高系统的可扩展性和灵活性。 3. 安全管理:Spring Security提供身份验证和授权机制,保护系统资源,防止未授权访问。 4. ...
3. RESTful API支持:Spring Boot支持创建RESTful风格的API,方便前后端分离,提高系统的可扩展性和灵活性。 三、Redis简介 Redis是一款高性能的键值对内存数据库,常用于缓存、消息队列等场景。它的优点包括高速...
SpringBoot集成了Spring Security,提供了一套完整的安全解决方案,包括身份验证、授权、CSRF保护等。开发者可以根据需求轻松定制安全策略。 6. **前端技术选型** 前端通常采用现代化的JavaScript框架,如React或...