一、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入门教程相关推荐

  1. Spring Security 入门(五):在 Spring-Boot中的应用

    前言 本文作为入门级的DEMO,完全按照官网实例演示: 项目目录结构 Maven 依赖  <parent>    <groupId>org.springframework.bo ...

  2. Spring Security 入门(四):自定义-Filter

    前文导读 - Spring Security入门(一):登录与退出 - Spring Security入门(二):基于数据库验证 - Spring Security入门(三):密码加密 本文解决问题 ...

  3. Spring Security入门(三):密码加密

    前文导读 - Spring Security入门(一):登录与退出 - Spring Security入门(二):基于数据库验证 Github 地址 https://github.com/ChinaS ...

  4. Spring Security 示例教程

    Spring Security 示例教程 Spring Security提供了在Web应用程序中执行身份验证和授权的方法.我们可以在任何基于servlet的Web应用程序中使用spring secur ...

  5. Spring Cloud入门教程(二):客户端负载均衡(Ribbon)

    对于大型应用系统负载均衡(LB:Load Balancing)是首要被解决一个问题.在微服务之前LB方案主要是集中式负载均衡方案,在服务消费者和服务提供者之间又一个独立的LB,LB通常是专门的硬件,如 ...

  6. Spring Security示例教程

    Spring Security provides ways to perform authentication and authorization in a web application. We c ...

  7. Spring Boot入门教程(四十):微信支付集成-刷卡支付

    分享一个朋友的人工智能教程.比较通俗易懂,风趣幽默,感兴趣的朋友可以去看看. 一:准备工作 使用微信支付需要先开通服务号,然后还要开通微信支付,最后还要配置一些开发参数,过程比较多. 申请服务号(企业 ...

  8. Spring Security系列教程03--创建SpringSecurity项目

    前言 在上一章节中,一一哥 已经带大家认识了Spring Security,对其基本概念已有所了解,但是作为一个合格的程序员,最关键的肯定还是得动起手来,所以从本篇文章开始,我就带大家搭建第一个Spr ...

  9. Spring Security入门到实践(一)HTTP Basic在Spring Security中的应用原理浅析

    一.Spring Security简介 打开Spring Security的官网,从其首页的预览上就可以看见如下文字: Spring Security is a powerful and highly ...

  10. Spring Security入门基础

    Spring Security入门基础 文章目录 Spring Security入门基础 一,Spring Security的使用 1.1 基本术语 1.2 基本使用 1.2.1 引入依赖 1.2.2 ...

最新文章

  1. QA32中的出口 “STATTEXT”
  2. HTML按钮中写事件,html 常用button事件
  3. 华为手机业务网络推广外包持续受限,在当前市场下还能做些什么?
  4. java 多线程 任务队列_Java并发编程线程池任务队列
  5. 答应我,调试Python代码,不要再用Print了!
  6. time zone issue in text processing
  7. python解决Net Frameword匹配问题及Failed building wheel for XXX
  8. sql server 2000的数据库还原
  9. 从头来之【iOS及历史版本特性介绍】
  10. 使用phppgadmin 遇到的小问题
  11. Java异步NIO框架Netty实现高性能高并发
  12. Onvif协议之服务端开发基本流程
  13. iOS模拟器找不到证书?
  14. java fps计算_帧率(FPS)计算的六种方法总结
  15. selenium模拟登陆163邮箱
  16. Windows PC 微信不显示头像或表情
  17. b、B、kb、kB单位
  18. 时间晶体,一种曾被认为是无法存在的物质,被创造出来了吗?
  19. 计算机语言的学习方法
  20. sql查询大于平均得分的球员的名字和得分,并追加显示平均得分的列

热门文章

  1. ST-Link系列usb驱动器下载
  2. 大黄,今年实在太难了!
  3. 几款非常好用并免费的项目进度管理软件
  4. 智能对话系统之多轮对话
  5. 高通平台驱动常见问题
  6. 7 vsphere 分配许可_vCenter server 5.5中添加ESXi5.5主机并分配许可密钥
  7. java中的动态图表_Java报表软件--动态图表
  8. PHP+HTML简单实现BBS论坛与回帖
  9. EtherCAT总线运动控制学习笔记(RXXW_Dor)
  10. 基于万维易源提供的API接口实现快递单号查询物流信息