- 浏览: 5028844 次
- 性别:
- 来自: 南京
文章分类
- 全部博客 (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上实现对比
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 6264严重: Servlet.service() for ser ... -
spring mvc统一异常处理(@ControllerAdvice + @ExceptionHandler)
2017-12-01 17:09 2998spring 封装了非常强大的异常处理机制。本文选取@Co ... -
springboot注解
2017-12-01 09:44 1016@RestController和@RequestMappin ... -
Spring 4 xml 注解配置谅解
2017-12-01 09:39 1110《Spring in Action》4th E ... -
利用junit对springMVC的Controller进行测试
2017-11-30 16:26 1441平时对junit测试service/D ... -
spring cloud config实现datasource的热部署
2017-11-21 16:44 1615关于spring cloud config的基本使用,前面的 ... -
Spring+MyBatis实现数据库读写分离方案
2017-11-20 17:15 1075百度关键词:spring mybatis 多数据源 读写分离 ... -
spring session 退出登录 清理session
2017-11-10 09:26 6469/** * Allows creating an ... -
spring http session 监听 创建 失效session
2017-11-15 09:35 4870一.流程概述 主要是通过扩展ServletRequest ... -
spring session spring:session:sessions:expires 源码跟踪
2017-11-14 09:37 1500/** * Saves any attribut ... -
spring session 考虑问题解答
2017-11-09 09:50 647相关问题 2.Redis容量考虑,由于spring see ... -
spring 获取bean 测试
2017-11-09 09:51 665package com.jayway.springsess ... -
spring父子容器与读取properties文件
2017-11-09 09:51 821读取properties文件中的内容,可以使用@Value ... -
Spring在代码中获取bean的几种方式
2017-11-08 09:46 1219方法一:在初始化时保存ApplicationContext对 ... -
Spring中DispacherServlet、WebApplicationContext、ServletContext的关系
2017-11-08 09:41 815解释一: 要想很好理解这三个上下文的关系,需 ... -
Spring以及SPringmvc相关问题: ServletContext -父子容器
2017-11-08 09:41 615总结如下: 明确了Servlet规范中Servl ... -
DelegatingFilterProxy
2017-11-08 09:48 1207摘要: 配置过滤器代理类,通过spring配置的bean来 ... -
DelegatingFilterProxy-api
2017-11-09 09:51 551为什么用DelegatingFilterProxy ... -
spring的启动过程——spring和springMVC父子容器的原理
2017-11-15 09:29 715要想很好理解这三个上下文的关系,需要先熟悉spri ... -
spring中bean被多次实例化问题
2017-11-13 09:33 52121. 描述 spring中提供了两种主要方式实例化bea ...
相关推荐
对于登录认证,最重要的过滤器是 UsernamePasswordAuthenticationFilter。它会拦截登录请求,并处理用户凭证的认证。 3. 认证管理器 在 UsernamePasswordAuthenticationFilter 中,收到请求后,Spring Security 会...
在Spring Security配置中,`UsernamePasswordAuthenticationFilter`通常位于一系列过滤器之后,如`CsrfFilter`和`LogoutFilter`。它们共同协作,确保安全控制的完整性和有效性。 通过理解`...
接下来,Spring Security会自动配置一个默认的安全过滤链,其中包括`UsernamePasswordAuthenticationFilter`,用于处理基于表单的登录。如果需要自定义登录逻辑,可以创建一个继承自`WebSecurityConfigurerAdapter`...
* UsernamePasswordAuthenticationFilter:完成认证处理,并把认证通过的实体保存到 SecurityContext 中 * FilterSecurityInterceptor:完成授权处理 认证授权流程 Spring Security3 的认证授权流程可以分为以下...
**Spring Security 认证授权实现** Spring Security 是一个强大的、高度可配置的安全框架,用于Java应用程序,它提供了全面的身份验证和授权服务。在本项目中,我们关注的是如何利用Spring Security来实现用户认证...
主要包括`DelegatingFilterProxy`、`ChannelProcessingFilter`、`SecurityContextPersistenceFilter`、`ConcurrentSessionFilter`、`UsernamePasswordAuthenticationFilter`、`BasicAuthenticationFilter`、`...
FilterSecurityInterceptor会检查URL权限,而UsernamePasswordAuthenticationFilter则处理登录表单提交,将用户的登录信息转换为Authentication对象。 在Spring MVC中,我们可以创建一个登录页面(如login.html),...
4. **处理登录成功**:在`UsernamePasswordAuthenticationFilter`中,你可以覆盖`onAuthenticationSuccess`方法,此方法会在用户成功登录后调用。在这里,你可以获取存储的URL,并将用户重定向回去。 5. **数据库...
- **认证**:当请求到达时,`AuthenticationEntryPoint`开始处理,接着是`UsernamePasswordAuthenticationFilter`,它尝试从请求中获取凭证并进行认证。如果认证成功,会将`Authentication`对象放入`...
- **实现自定义登录逻辑**:创建一个继承自`UsernamePasswordAuthenticationFilter`的类,覆盖`attemptAuthentication`方法,实现自定义的登录验证。这里可以连接到数据库,查询用户信息,进行密码哈希比较等。 - *...
- **用户认证**:对于前后端分离的应用程序,需要对`UsernamePasswordAuthenticationFilter`进行扩展,以便能够处理POST请求体中的登录信息。此外,还需要修改默认的行为,使其在认证成功后生成JWT并将其发送回...
这个链中包含如`ChannelProcessingFilter`(处理SSL/TLS)、`SecurityContextPersistenceFilter`(维护会话中的安全上下文)、`ConcurrentSessionFilter`(管理并发会话)、`UsernamePasswordAuthenticationFilter`...
- **过滤器链**:Spring Security 使用一系列预定义的过滤器,如 ChannelProcessingFilter、SecurityContextPersistenceFilter、LogoutFilter 和 UsernamePasswordAuthenticationFilter,它们在请求处理过程中拦截...
.addFilterBefore(new IPFilter(), UsernamePasswordAuthenticationFilter.class); // 在UsernamePasswordAuthenticationFilter之前添加IP过滤器 } } ``` 在实际应用中,你可能还需要考虑以下几点: 1. **异常...
5. **过滤器链**:Spring Security的工作主要是通过一系列过滤器完成的,如`UsernamePasswordAuthenticationFilter`负责处理登录请求,`AnonymousAuthenticationFilter`为未认证用户提供匿名身份等。我们可以自定义...
Spring Security通过过滤器链来实现安全控制,这些过滤器包括但不限于:`DelegatingRequestMatcherFilter`,`SecurityContextPersistenceFilter`,`LogoutFilter`,`UsernamePasswordAuthenticationFilter`等。...
Spring Security通过定义一系列的安全过滤器(如:UsernamePasswordAuthenticationFilter、AnonymousAuthenticationFilter等)来拦截HTTP请求,从而实现对用户身份的验证和授权。 **认证过程**: 1. 用户尝试访问受...
在这个配置中,`customAuthenticationFilter`被添加到过滤器链中,且位于`UsernamePasswordAuthenticationFilter`之前。这意味着在Spring Security的默认认证流程开始前,我们的自定义过滤器将先执行。 3. **集成...
Spring Security 提供了一个`UsernamePasswordAuthenticationFilter`,默认处理POST到"/login"的请求。如果你使用了自定义登录页面,需要确保这个过滤器被正确配置。你可能需要扩展这个过滤器或者创建一个新的过滤器...
接下来,为了实现安全认证,我们需要设置SpringSecurity的过滤链,包括UsernamePasswordAuthenticationFilter、OAuth2AuthenticationProcessingFilter等,确保用户的身份得到正确验证。同时,还需要配置...