Spring Security入门教程
一、Spring Security的配置文件
springSecurity.xml
<security:http pattern="/login.jsp" security="none"/><security:http pattern="/error.jsp" security="none"/><security:http pattern="/css/**" security="none"/><security:http pattern="/img/**" security="none"/><security:http pattern="/pages/**" security="none"/><security:http pattern="/plugins/**" security="none"/><security:http auto-config="true" use-expressions="false"><security:intercept-url pattern="/**" access="ROLE_ADMIN"/><security:form-login login-processing-url="/login"authentication-success-handler-ref="successHandller"default-target-url="/index.jsp"authentication-failure-handler-ref="failerHandller"login-page="/login.jsp"/><security:access-denied-handler error-page="/403.jsp"/><security:csrf disabled="true"/><security:logout logout-success-url="/login.jsp"invalidate-session="true" logout-url="/logout"/></security:http><security:authentication-manager><security:authentication-provider user-service-ref="userService"><security:password-encoder ref="pwdEncoder"/></security:authentication-provider></security:authentication-manager><bean id="pwdEncoder" class="org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder"/>
配置权限框架拦截的规则
auto-config="true" 应用框架的默认配置
use-expressions="false" 关闭框架使用的表达式
intercept-url pattern="/**" 拦截所有的浏览器请求
access="ROLE_ADMIN" 只有ROLE_ADMIN角色的用才可以访问 规则角色名必须以ROLE_开头
验证的节点
二、Spring Security中11中过滤器的介绍
1.HttpSessionContextIntegrationFilter
位于过滤器顶端,第一个起作用的过滤器。
用途一,在执行其他过滤器之前,率先判断用户的session中是否已经存在一个SecurityContext了。如果存在,就把SecurityContext拿出来,放到SecurityContextHolder中,供SpringSecurity的其他部分使用。如果不存在,就创建一个SecurityContext出来,还是放到SecurityContextHolder中,供SpringSecurity的其他部分使用。
用途二,在所有过滤器执行完毕后,清空SecurityContextHolder,因为SecurityContextHolder是基于ThreadLocal的,如果在操作完成后清空ThreadLocal,会受到服务器的线程池机制的影响。
2.LogoutFilter
只处理注销请求,默认为/j_spring_security_logout。
用途是在用户发送注销请求时,销毁用户session,清空SecurityContextHolder,然后重定向到注销成功页面。可以与rememberMe之类的机制结合,在注销的同时清空用户cookie。
3.AuthenticationProcessingFilter
处理form登陆的过滤器,与form登陆有关的所有操作都是在此进行的。
默认情况下只处理/j_spring_security_check请求,这个请求应该是用户使用form登陆后的提交地址,form所需的其他参数可以参考:
此过滤器执行的基本操作时,通过用户名和密码判断用户是否有效,如果登录成功就跳转到成功页面(可能是登陆之前访问的受保护页面,也可能是默认的成功页面),如果登录失败,就跳转到失败页面。
/j_spring_security_check" style="width:260px;text-align:center;">
/j_spring_security_check,提交登陆信息的URL地址。
自定义form时,要把form的action设置为/j_spring_security_check。注意这里要使用绝对路径,避免登陆页面存放的页面可能带来的问题。
j_username,输入登陆名的参数名称。
j_password,输入密码的参数名称
_spring_security_remember_me,选择是否允许自动登录的参数名称。
可以直接把这个参数设置为一个checkbox,无需设置value,Spring Security会自行判断它是否被选中。
4.DefaultLoginPageGeneratingFilter
此过滤器用来生成一个默认的登录页面,默认的访问地址为/spring_security_login,这个默认的登录页面虽然支持用户输入用户名,密码,也支持rememberMe功能,但是因为太难看了,只能是在演示时做个样子,不可能直接用在实际项目中。
自定义登陆页面
authentication-failure-url="/login.jsp?error=true"
default-target-url="/" />
5.BasicProcessingFilter
此过滤器用于进行basic验证,功能与AuthenticationProcessingFilter类似,只是验证的方式不同。
添加basic认证,去掉auto-config="true",并加上auto-config="true">
6.SecurityContextHolderAwareRequestFilter
此过滤器用来包装客户的请求。目的是在原始请求的基础上,为后续程序提供一些额外的数据。比如getRemoteUser()时直接返回当前登陆的用户名之类的。
7.RememberMeProcessingFilter
此过滤器实现RememberMe功能,当用户cookie中存在rememberMe的标记,此过滤器会根据标记自动实现用户登陆,并创建SecurityContext,授予对应的权限。
在配置文件中使用auto-config="true"就会自动启用rememberMe
实际上,Spring Security中的rememberMe是依赖cookie实现的,当用户在登录时选择使用rememberMe,系统就会在登录成功后将为用户生成一个唯一标识,并将这个标识保存进cookie中,我们可以通过浏览器查看用户电脑中的cookie。
8.AnonymousProcessingFilter
为了保证操作统一性,当用户没有登陆时,默认为用户分配匿名用户的权限。
在配置文件中使用auto-config="true"就会启用匿名登录功能。在启用匿名登录之后,如果我们希望允许未登录就可以访问一些资源,可以在进行如下配置。
access="IS_AUTHENTICATED_ANONYMOUSLY" />设置成 ROLE_ANONYMOUS 也可以。
filters="none" />filters="none"表示当我们访问“/”时,是不会使用任何一个过滤器去处理这个请求的,它可以实现无需登录即可访问资源的效果,但是因为没有使用过滤器对请求进行处理,所以也无法利用安全过滤器为我们带来的好处,最简单的,这时SecurityContext内再没有保存任何一个权限主体了,我们也无法从中取得主体名称以及对应的权限信息。
9.ExceptionTranslationFilter
此过滤器的作用是处理中FilterSecurityInterceptor抛出的异常,然后将请求重定向到对应页面,或返回对应的响应错误代码。
10.SessionFixationProtectionFilter
防御会话伪造攻击。
解决session fix的问题其实很简单,只要在用户登录成功之后,销毁用户的当前session,并重新生成一个session就可以了。
session-fixation-protection="none">
session-fixation-protection的值共有三个可供选择,none,migrateSession和newSession。默认使用的是migrationSession
11.FilterSecurityInterceptor
用户的权限控制都包含在这个过滤器中。
功能一:如果用户尚未登陆,则抛出AuthenticationCredentialsNotFoundException“尚未认证异常”。
功能二:如果用户已登录,但是没有访问当前资源的权限,则抛出AccessDeniedException“拒绝访问异常”。
功能三:如果用户已登录,也具有访问当前资源的权限,则放行。
Spring Security入门教程相关推荐
- Spring Security 入门(五):在 Spring-Boot中的应用
前言 本文作为入门级的DEMO,完全按照官网实例演示: 项目目录结构 Maven 依赖 <parent> <groupId>org.springframework.bo ...
- Spring Security 入门(四):自定义-Filter
前文导读 - Spring Security入门(一):登录与退出 - Spring Security入门(二):基于数据库验证 - Spring Security入门(三):密码加密 本文解决问题 ...
- Spring Security入门(三):密码加密
前文导读 - Spring Security入门(一):登录与退出 - Spring Security入门(二):基于数据库验证 Github 地址 https://github.com/ChinaS ...
- Spring Security 示例教程
Spring Security 示例教程 Spring Security提供了在Web应用程序中执行身份验证和授权的方法.我们可以在任何基于servlet的Web应用程序中使用spring secur ...
- Spring Cloud入门教程(二):客户端负载均衡(Ribbon)
对于大型应用系统负载均衡(LB:Load Balancing)是首要被解决一个问题.在微服务之前LB方案主要是集中式负载均衡方案,在服务消费者和服务提供者之间又一个独立的LB,LB通常是专门的硬件,如 ...
- Spring Security示例教程
Spring Security provides ways to perform authentication and authorization in a web application. We c ...
- Spring Boot入门教程(四十):微信支付集成-刷卡支付
分享一个朋友的人工智能教程.比较通俗易懂,风趣幽默,感兴趣的朋友可以去看看. 一:准备工作 使用微信支付需要先开通服务号,然后还要开通微信支付,最后还要配置一些开发参数,过程比较多. 申请服务号(企业 ...
- Spring Security系列教程03--创建SpringSecurity项目
前言 在上一章节中,一一哥 已经带大家认识了Spring Security,对其基本概念已有所了解,但是作为一个合格的程序员,最关键的肯定还是得动起手来,所以从本篇文章开始,我就带大家搭建第一个Spr ...
- Spring Security入门到实践(一)HTTP Basic在Spring Security中的应用原理浅析
一.Spring Security简介 打开Spring Security的官网,从其首页的预览上就可以看见如下文字: Spring Security is a powerful and highly ...
- Spring Security入门基础
Spring Security入门基础 文章目录 Spring Security入门基础 一,Spring Security的使用 1.1 基本术语 1.2 基本使用 1.2.1 引入依赖 1.2.2 ...
最新文章
- QA32中的出口 “STATTEXT”
- HTML按钮中写事件,html 常用button事件
- 华为手机业务网络推广外包持续受限,在当前市场下还能做些什么?
- java 多线程 任务队列_Java并发编程线程池任务队列
- 答应我,调试Python代码,不要再用Print了!
- time zone issue in text processing
- python解决Net Frameword匹配问题及Failed building wheel for XXX
- sql server 2000的数据库还原
- 从头来之【iOS及历史版本特性介绍】
- 使用phppgadmin 遇到的小问题
- Java异步NIO框架Netty实现高性能高并发
- Onvif协议之服务端开发基本流程
- iOS模拟器找不到证书?
- java fps计算_帧率(FPS)计算的六种方法总结
- selenium模拟登陆163邮箱
- Windows PC 微信不显示头像或表情
- b、B、kb、kB单位
- 时间晶体,一种曾被认为是无法存在的物质,被创造出来了吗?
- 计算机语言的学习方法
- sql查询大于平均得分的球员的名字和得分,并追加显示平均得分的列