BasicAuthenticationFilter过滤器对应的类路径为
org.springframework.security.web.authentication.www.BasicAuthenticationFilter
Basic验证方式相比较而言用的不是太多。spring security也支持basic的方式,配置如下
<security:http auto-config="true">
<!-- <security:form-login login-page="/login.jsp"/>-->
<security:http-basic/>
<security:logout logout-success-url="/login.jsp" invalidate-session="true"/>
<security:intercept-url pattern="/login.jsp*" filters="none"/>
<security:intercept-url pattern="/admin.jsp*" access="ROLE_ADMIN"/>
<security:intercept-url pattern="/index.jsp*" access="ROLE_USER,ROLE_ADMIN"/>
<security:intercept-url pattern="/**" access="ROLE_USER,ROLE_ADMIN"/>
</security:http>
如果选择basic方式,需要把form-login标签的定义给注释掉。
接下来看BasicAuthenticationFilter的执行过程
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
throws IOException, ServletException {
final boolean debug = logger.isDebugEnabled();
final HttpServletRequest request = (HttpServletRequest) req;
final HttpServletResponse response = (HttpServletResponse) res;
//basic登录时,会产生Authorization的header信息
//Authorization的值是Basic eXVxaW5nc29uZzox
//eXVxaW5nc29uZzox是经过base编码的一串字符
String header = request.getHeader("Authorization");
if ((header != null) && header.startsWith("Basic ")) {
byte[] base64Token = header.substring(6).getBytes("UTF-8");
//经过base解码后,token值为username:password这种方式
String token = new String(Base64.decode(base64Token), getCredentialsCharset(request));
String username = "";
String password = "";
int delim = token.indexOf(":");
if (delim != -1) {
username = token.substring(0, delim);
password = token.substring(delim + 1);
}
if (debug) {
logger.debug("Basic Authentication Authorization header found for user '" + username + "'");
}
//下面的执行过程基本和login方式一样,认证、授权等过程
if (authenticationIsRequired(username)) {
UsernamePasswordAuthenticationToken authRequest =
new UsernamePasswordAuthenticationToken(username, password);
authRequest.setDetails(authenticationDetailsSource.buildDetails(request));
Authentication authResult;
try {
authResult = authenticationManager.authenticate(authRequest);
} catch (AuthenticationException failed) {
// Authentication failed
if (debug) {
logger.debug("Authentication request for user: " + username + " failed: " + failed.toString());
}
SecurityContextHolder.getContext().setAuthentication(null);
rememberMeServices.loginFail(request, response);
onUnsuccessfulAuthentication(request, response, failed);
if (ignoreFailure) {
chain.doFilter(request, response);
} else {
authenticationEntryPoint.commence(request, response, failed);
}
return;
}
// Authentication success
if (debug) {
logger.debug("Authentication success: " + authResult.toString());
}
SecurityContextHolder.getContext().setAuthentication(authResult);
rememberMeServices.loginSuccess(request, response, authResult);
onSuccessfulAuthentication(request, response, authResult);
}
}
chain.doFilter(request, response);
}
分享到:
相关推荐
### Spring Security 源码分析知识...以上内容涵盖了 Spring Security 3 的源码分析中几个关键点的具体内容。通过对这些内容的深入学习和理解,可以更好地掌握 Spring Security 的工作原理及其在实际项目中的应用技巧。
3. **过滤器链**:Spring Security的核心在于它的过滤器链,包括BasicAuthenticationFilter、RememberMeAuthenticationFilter等,它们在HTTP请求处理过程中介入,实现认证和授权。 二、配置与定制 1. **XML配置**...
4. **Filter Chain**:Spring Security通过一系列过滤器形成一个过滤链,每个过滤器都有特定的任务,如BasicAuthenticationFilter处理基本认证,RememberMeAuthenticationFilter处理记住我功能等。 5. **Session ...
### Spring Security详细介绍及使用 #### 一、Spring Security概述 Spring Security是一款强大的安全框架,它专为基于Spring的企业级应用提供了声明式安全访问控制。该框架利用Spring框架的核心功能,如IoC...
Spring Security3 安全个人总结 Spring Security3 是一个基于 Java 的安全框架,提供了一个灵活的安全机制来保护基于 Spring 的应用程序。在这个总结中,我们将详细介绍 Spring Security3 的安全机制、原理和核心...
**Spring Security 2 中文参考文档** Spring Security是一款强大的安全框架,主要用于Java应用程序的安全管理。在Spring Security 2版本中,它提供了丰富的功能,包括身份验证、授权、访问控制以及安全相关的会话...
3. **使用Spring Security的访问决策管理器(AccessDecisionManager)**:如果你希望控制哪些角色可以访问静态资源,可以实现自己的访问决策管理器,然后在配置中指定使用这个管理器。 4. **使用HTTP基本认证或OAuth2...
本文将深入剖析Spring Security 3的源码,揭示其核心组件和工作流程。 1. **FilterChainProxy初始化**:FilterChainProxy是Spring Security的核心过滤器链,它负责根据配置定义的过滤器顺序执行安全检查。在启动时...
### Spring Security 参考手册知识点概览 #### 一、Spring Security 概述 - **定义**:Spring Security 是一个强大的、高度可定制的身份验证和访问控制框架。 - **历史**:Spring Security 随着 Spring 框架的发展...
Spring Security的源码是开源的,你可以深入研究其内部工作原理,了解每个组件是如何协同工作的。这将帮助你更好地理解和定制这个框架。 7. **工具**: - Spring Security的官方文档和教程是学习的重要资源。 - ...
[输入图片说明](https://gitee.com/uploads/images/2018/0211/154308_9576ce90_130820.png "jwt-3.png") 4.用登录成功后拿到的token再次请求/users/userList接口 4.1将请求中的XXXXXX替换成拿到的token ...
3. Spring Security 4.2的新特性 27 3.1 Web改进 27 3.2配置改进 28 3.3杂项 28 4.样品和指南(从这里开始) 28 5. Java配置 29 5.1 Hello Web安全Java配置 29 5.1.1 AbstractSecurityWebApplicationInitializer 31 ...
3. 配置 `spring-security.xml`,定义安全规则,如访问控制、认证机制等。 在 `spring-security.xml` 中,你可以使用 `<http>` 元素定义 URL 的安全策略,使用 `<authentication-manager>` 配置认证机制,以及使用 ...
这篇博文的作者通过实际操作分享了他在使用SpringSecurity时的经验,虽然描述中并未给出具体细节,但我们可以从标题和标签中推测,本文可能涉及了SpringSecurity的源码分析和工具的使用。 SpringSecurity的核心概念...
7. **过滤器链**:Spring Security通过一系列过滤器处理HTTP请求,如`HttpSessionAuthenticationStrategy`用于会话管理,`BasicAuthenticationFilter`处理基本认证,`CsrfFilter`防止跨站请求伪造等。 8. **状态...
3. 访问控制:Spring Security的`@Secured`和`@PreAuthorize`注解可以用来标记方法,限制只有具有特定权限的用户才能执行。此外,还可以通过配置HTTP安全设置来控制对URL的访问,比如使用`antMatchers`和`hasRole`。...
无论是源码解读、拦截器链分析,还是第三方登录集成、短信验证与登录,甚至是自定义验证授权设计模式,Spring Security都能满足不同场景下的需求。对于希望深入了解Spring Security的企业开发者而言,这份资源文档将...
SpringSecurity 是一个强大的Java安全框架,用于保护Web应用程序免受各种攻击。在SpringSecurity 3.1版本中,相比3.0版本,配置上有一些变化,但其核心仍然是通过一系列过滤器来实现安全控制。本文将详细介绍Spring...
此外,Spring Security 提供了丰富的过滤器链,如 `UsernamePasswordAuthenticationFilter` 和 `BasicAuthenticationFilter`,它们处理用户的登录请求。这些过滤器可以根据需求进行自定义和配置。 至于 `c exercise...