- 浏览: 4941584 次
- 性别:
- 来自: 南京
文章分类
- 全部博客 (2844)
- java (1094)
- hadoop (37)
- jvm (39)
- hbase (11)
- sql (25)
- 异常 (83)
- div css (6)
- 数据库 (95)
- 有趣的code (15)
- struts2 (6)
- spring (124)
- js (44)
- 算法 (65)
- linux (36)
- hibernate (7)
- 中间件 (78)
- 设计模式 (2)
- 架构 (275)
- 操作系统 (91)
- maven (35)
- tapestry (1)
- mybatis (9)
- MQ (101)
- zookeeper (18)
- 搜索引擎,爬虫 (208)
- 分布式计算 (45)
- c# (7)
- 抓包 (28)
- 开源框架 (45)
- 虚拟化 (12)
- mongodb (15)
- 计算机网络 (2)
- 缓存 (97)
- memcached (6)
- 分布式存储 (13)
- scala (5)
- 分词器 (24)
- spark (104)
- 工具 (23)
- netty (5)
- Mahout (6)
- neo4j (6)
- dubbo (36)
- canal (3)
- Hive (10)
- Vert.x (3)
- docker (115)
- 分布式追踪 (2)
- spring boot (5)
- 微服务 (56)
- 淘客 (5)
- mesos (67)
- php (3)
- etcd (2)
- jenkins (4)
- nginx (7)
- 区块链 (1)
- Kubernetes (92)
- 驾照 (1)
- 深度学习 (15)
- JGroups (1)
- 安全 (5)
- 测试 (16)
- 股票 (1)
- Android (2)
- 房产 (1)
- 运维 (6)
- 网关 (3)
最新评论
-
明兜3号:
部署落地+业务迁移 玩转k8s进阶与企业级实践技能(又名:Ku ...
Kubernetes系统常见运维技巧 -
q328965539:
牛掰啊 资料收集的很全面
HDFS小文件处理解决方案总结+facebook(HayStack) + 淘宝(TFS) -
guichou:
fluent挂载了/var/lib/kubelet/pods目 ...
kubernetes上部署Fluentd+Elasticsearch+kibana日志收集系统 -
xu982604405:
System.setProperty("java.r ...
jmx rmi 穿越防火墙问题及jmxmp的替代方案 -
大漠小帆:
麻烦问下,“获取每个Item相似性最高的前N个Item”,这个 ...
协同过滤推荐算法在MapReduce与Spark上实现对比
UsernamePasswordAuthenticationFilter
- 博客分类:
- spring
springSecurity的登录验证是由org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter这个过滤器来完成的,在该类的父类AbstractAuthenticationProcessingFilter中有一个AuthenticationManager接口属性,验证工作主如果经由过程这个AuthenticationManager接口的实例来完成的。在默认景象下,springSecurity框架会把org.springframework.security.authentication.ProviderManager类的实例注入到该属性,
AuthenticationManager接口的相干类图如下:
UsernamePasswordAuthenticationFilter的验证过程如下:
1. 起首过滤器会调用自身的attemptAuthentication办法,从request中取出authentication, authentication是在org.springframework.security.web.context.SecurityContextPersistenceFilter过滤器中经由过程捕获用户提交的登录表单中的内容生成的一个org.springframework.security.core.Authentication接话柄例.
2. 拿到authentication对象后,过滤器会调用ProviderManager类的authenticate办法,并传入该对象
3.ProviderManager类的authenticate办法再调用自身的doAuthentication办法,在doAuthentication办法中会调用类中的List<AuthenticationProvider> providers凑集中的各个AuthenticationProvider接话柄现类中的authenticate(Authentication authentication)办法进行验证,由此可见,真正的验证逻辑是由各个各个AuthenticationProvider接话柄现类来完成的,DaoAuthenticationProvider类是默认景象****入的一个AuthenticationProvider接话柄现类
4.AuthenticationProvider接口经由过程UserDetailsService来获取用户信息
以下为时序图:
处理form登陆的过滤器,与form登陆有关的所有操作都是在此进行的。
默认情况下只处理/j_spring_security_check请求,这个请求应该是用户使用form登陆后的提交地址,form所需的其他参数可以参考:
此过滤器执行的基本操作时,通过用户名和密码判断用户是否有效,如果登录成功就跳转到成功页面(可能是登陆之前访问的受保护页面,也可能是默认的成功页面),如果登录失败,就跳转到失败页面。
<form action="${pageContext.request.contextPath}/j_spring_security_check" style="width:260px;text-align:center;">
<fieldset>
<legend>登陆</legend>
用户: <input type="text" name="j_username" style="width:150px;" value="${sessionScope['SPRING_SECURITY_LAST_USERNAME']}"/><br />
密码: <input type="password" name="j_password" style="width:150px;" /><br />
<input type="checkbox" name="_spring_security_remember_me" />两周之内不必登陆<br />
<input type="submit" value="登陆"/>
<input type="reset" value="重置"/>
</fieldset>
</form>
源码:dofilter方法源码
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) /* */ throws IOException, ServletException /* */ { /* 184 */ HttpServletRequest request = (HttpServletRequest)req; /* 185 */ HttpServletResponse response = (HttpServletResponse)res; /* 187 */ if (!requiresAuthentication(request, response)) { /* 188 */ chain.doFilter(request, response); /* */ /* 190 */ return; /* */ } /* */ /* 193 */ if (this.logger.isDebugEnabled()) { /* 194 */ this.logger.debug("Request is to process authentication"); /* */ } /* */ Authentication authResult; /* */ try /* */ { /* 200 */ authResult = attemptAuthentication(request, response); /* 201 */ if (authResult == null) /* */ { /* 203 */ return; /* */ } /* 205 */ this.sessionStrategy.onAuthentication(authResult, request, response); /* */ } /* */ catch (AuthenticationException failed) /* */ { /* 209 */ unsuccessfulAuthentication(request, response, failed); /* */ /* 211 */ return; /* */ }
protected boolean requiresAuthentication(HttpServletRequest request, HttpServletResponse response) /* */ { /* 235 */ String uri = request.getRequestURI(); /* 236 */ int pathParamIndex = uri.indexOf(';'); /* */ /* 238 */ if (pathParamIndex > 0) /* */ { /* 240 */ uri = uri.substring(0, pathParamIndex); /* */ } /* */ /* 243 */ if ("".equals(request.getContextPath())) { /* 244 */ return uri.endsWith(this.filterProcessesUrl); /* */ } /* */ /* 247 */ return uri.endsWith(request.getContextPath() + this.filterProcessesUrl); /* */ }
如果请求url 的路径是j_spring_security_check 则检测
|
/j_spring_security_check,提交登陆信息的URL地址。 自定义form时,要把form的action设置为/j_spring_security_check。注意这里要使用绝对路径,避免登陆页面存放的页面可能带来的问题。 |
|
j_username,输入登陆名的参数名称。 |
|
j_password,输入密码的参数名称 |
|
_spring_security_remember_me,选择是否允许自动登录的参数名称。 可以直接把这个参数设置为一个checkbox,无需设置value,Spring Security会自行判断它是否被选中。 |
发表评论
-
spring session序列化问题排查
2017-12-01 19:07 6160严重: Servlet.service() for ser ... -
spring mvc统一异常处理(@ControllerAdvice + @ExceptionHandler)
2017-12-01 17:09 2947spring 封装了非常强大的异常处理机制。本文选取@Co ... -
springboot注解
2017-12-01 09:44 974@RestController和@RequestMappin ... -
Spring 4 xml 注解配置谅解
2017-12-01 09:39 1064《Spring in Action》4th E ... -
利用junit对springMVC的Controller进行测试
2017-11-30 16:26 1404平时对junit测试service/D ... -
spring cloud config实现datasource的热部署
2017-11-21 16:44 1580关于spring cloud config的基本使用,前面的 ... -
Spring+MyBatis实现数据库读写分离方案
2017-11-20 17:15 1027百度关键词:spring mybatis 多数据源 读写分离 ... -
spring session 退出登录 清理session
2017-11-10 09:26 6400/** * Allows creating an ... -
spring http session 监听 创建 失效session
2017-11-15 09:35 4819一.流程概述 主要是通过扩展ServletRequest ... -
spring session spring:session:sessions:expires 源码跟踪
2017-11-14 09:37 1444/** * Saves any attribut ... -
spring session 考虑问题解答
2017-11-09 09:50 610相关问题 2.Redis容量考虑,由于spring see ... -
spring 获取bean 测试
2017-11-09 09:51 621package com.jayway.springsess ... -
spring父子容器与读取properties文件
2017-11-09 09:51 796读取properties文件中的内容,可以使用@Value ... -
Spring在代码中获取bean的几种方式
2017-11-08 09:46 1175方法一:在初始化时保存ApplicationContext对 ... -
Spring中DispacherServlet、WebApplicationContext、ServletContext的关系
2017-11-08 09:41 787解释一: 要想很好理解这三个上下文的关系,需 ... -
Spring以及SPringmvc相关问题: ServletContext -父子容器
2017-11-08 09:41 587总结如下: 明确了Servlet规范中Servl ... -
DelegatingFilterProxy
2017-11-08 09:48 1162摘要: 配置过滤器代理类,通过spring配置的bean来 ... -
DelegatingFilterProxy-api
2017-11-09 09:51 515为什么用DelegatingFilterProxy ... -
spring的启动过程——spring和springMVC父子容器的原理
2017-11-15 09:29 679要想很好理解这三个上下文的关系,需要先熟悉spri ... -
spring中bean被多次实例化问题
2017-11-13 09:33 51511. 描述 spring中提供了两种主要方式实例化bea ...
相关推荐
8.4. UsernamePasswordAuthenticationFilter 8.4.1. 认证成功和失败的应用流程 9. Basic(基本)和Digest(摘要)验证 9.1. BasicAuthenticationFilter 9.1.1. 配置 9.2. DigestAuthenticationFilter ...
该类继承自UsernamePasswordAuthenticationFilter,重写了其中的2个方法: attemptAuthentication :接收并解析用户凭证。 successfulAuthentication :用户成功登录后,这个方法会被调用,我们在这个方法里生成...
8.4. UsernamePasswordAuthenticationFilter 8.4.1. 认证成功和失败的应用流程 9. Basic(基本)和Digest(摘要)验证 9.1. BasicAuthenticationFilter 9.1.1. 配置 9.2. DigestAuthenticationFilter ...
8.4. UsernamePasswordAuthenticationFilter 8.4.1. 认证成功和失败的应用流程 9. Basic(基本)和Digest(摘要)验证 9.1. BasicAuthenticationFilter 9.1.1. 配置 9.2. DigestAuthenticationFilter 9.2.1. ...
14.4 UsernamePasswordAuthenticationFilter 125 14.4.1认证成功与失败的应用流程 125 15. Servlet API集成 127 15.1 Servlet 2.5+集成 127 15.1.1 HttpServletRequest.getRemoteUser() 127 15.1.2 ...
UsernamePasswordAuthenticationFilter 表示表单登陆过滤器 BasicAuthenticationFilter 表示 httpbaic 方式登陆过滤器 图中橙色的 FilterSecurityInterceptor 是最终的过滤器,它会决定当前的请求可不可以访问...
在集成 Spring ...根据以前的相关文章介绍, Http 登录认证由过滤器UsernamePasswordAuthenticationFilter 进行处理。我们只有把这个过滤器搞清楚才能做一些定制化。今天我们就简单分析它的源码和工作流程。
传统的方法是在认证通过后,创建...核心功能是在验证用户名密码正确后,生成一个token,并将token返回给客户端:该类继承自UsernamePasswordAuthenticationFilter,重写了其中的2个方法:attemptAuthentication :接
5 = {UsernamePasswordAuthenticationFilter @ 7755} 6 = {RequestCacheAwareFilter @ 9937} 7 = {SecurityContextHolderAwareRequestFilter @ 9938} 8 = {AnonymousAuthenticationFilter @ 9939} 9 = {...