在现实项目中,经常出现用户登录验证时,需要验证除了用户名、密码外的其他项,或额外的验证逻辑。当使用Spring Security框架时,就需要修改默认的验证方式。当以form表单方式登录时,可以有两种方式实现,任意实现一种即可。以Restful的方式提交JSON格式参数登录时或Restful,form方式混用时,可以两种方式结合使用。
第一种方式,自定义AuthenticationProvider。这种方式在authenticate(Authentication authentication)方法中实现验证逻辑。supports方法返回true,才会执行authenticate方法。
实现完Provider后,需要在WebSecurityConfigurerAdapter中替换默认的AuthenticationProvider:
@Autowired
private MyAuthProvider authProvider;
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception
{
auth.authenticationProvider(authProvider);
}
第二种方式,自定义AbstractAuthenticationProcessingFilter。这种方式通过覆写attemptAuthentication方法来实现验证逻辑。自定义Filter后,需要在WebSecurityConfigurerAdapter添加该Filter:
@Bean
public MyAuthFilter customUsernamePasswordAuthenticationFilter() throws Exception {
MyAuthFilter customUsernamePasswordAuthenticationFilter = new MyAuthFilter();
customUsernamePasswordAuthenticationFilter.setAuthenticationManager(authenticationManagerBean());
customUsernamePasswordAuthenticationFilter
.setRequiresAuthenticationRequestMatcher(new AntPathRequestMatcher("/login", "POST"));
return customUsernamePasswordAuthenticationFilter;
}
// @formatter:off
@Override
protected void configure(HttpSecurity http) throws Exception {
http.addFilterBefore(customUsernamePasswordAuthenticationFilter(), UsernamePasswordAuthenticationFilter.class);
...
}
如果实际项目中,同时存在form登录和Restful方式的登录,可以两种方式结合使用或完全放在Filter中实现验证。在Filter中覆写obtainUsername、obtainPassword方法,解析JSON取得用户名、口令。然后再在Filter的attemptAuthentication方法或Provider中实现验证。
参考资料:http://blog.csdn.net/xiejx618/article/details/42609497
http://www.baeldung.com/spring-security-authentication-provider
https://blog.codecentric.de/en/2012/07/spring-security-two-security-realms-in-one-application/
分享到:
相关推荐
本教程将详细讲解如何在Spring Boot 3.x版本中结合Spring Security的最新版实现JWT(JSON Web Token)登录验证。 首先,让我们了解JWT。JWT是一种轻量级的身份认证和授权机制,它以JSON对象的形式在客户端和服务器...
Spring Security 3.1支持两种Remember Me实现:基于令牌的和基于持久化记住的。 7. **集成Spring MVC**:Spring Security 3.1与Spring MVC无缝集成,可以方便地保护Web控制器和视图。通过注解,如`@Secured`和`@...
Spring Security OAuth 是一个用于保护RESTful Web服务的框架,它为OAuth 1.0a和OAuth 2.0协议提供了全面的支持。在这个源码中,我们可能会看到如何将Spring Security与OAuth结合,以构建安全的Web应用程序和服务。...
- `spring-security-rest-digest-auth` 和 `spring-security-rest-basic-auth` 分别演示了这两种常见的HTTP认证方法。Basic认证使用Base64编码的用户名和密码,而Digest认证更安全,因为它在传输过程中不暴露明文...
Spring Security 提供了一种安全的实现方式,使用加密技术存储用户的持久化登录信息。 7. **OAuth2与OpenID Connect集成**:Spring Security 支持OAuth2和OpenID Connect,这两种标准用于第三方应用的授权。这使得...
Spring Security 提供了 XML 和 Java Config 两种配置方式。Java Config 更加灵活,更容易理解和维护。通过继承 `WebSecurityConfigurerAdapter` 并覆盖其方法,我们可以自定义安全规则,如设置登录页面、定义访问...
获取 Spring Security 主要有两种方式:下载预编译的 JAR 文件或者从源代码构建。JAR 文件包括了不同的模块,每个模块提供了一组特定的功能: - **Core (`spring-security-core.jar`):** 包含了身份验证和授权的...
在构建基于 Java 17 的现代化应用程序时,Spring Boot 3 和 Spring Security 6 是两个核心框架,它们为后端提供了强大的支持。Spring Boot 旨在简化 Spring 应用的初始搭建以及开发过程,通过默认配置和自动配置特性...
我们将重点讨论基本认证和WS-Security这两种常见的实现方式。 1. **基本认证**: 基本认证是最简单的HTTP身份验证形式,它涉及将用户名和密码编码为Base64字符串并在HTTP请求头中传递。在CXF中,可以通过配置...
Spring Boot简化了Java应用的开发,而Spring Security则提供了强大的安全框架,JWT则是一种广泛用于身份验证和授权的安全机制。下面我们将详细讲解这三个组件的核心概念及其在实际项目中的整合。 首先,让我们从...
在这个项目中,Spring Security可能被用来设置HTTP Basic认证或者自定义登录逻辑,实现用户登录验证。 - **RESTful API**:SpringBoot通过@RestController注解可以方便地创建RESTful服务,为Vue前端提供数据接口。...
3. 构造器注入与setter注入:比较两种注入方式的优缺点,选择合适的注入策略。 4. Bean的作用域:掌握singleton、prototype、request、session等不同作用域的概念及其应用场景。 三、AOP(面向切面编程) 1. AOP...
Spring Security有两种主要的配置方式:XML配置和Java配置。随着Spring Boot的普及,Java配置成为更主流的选择,通过@Configuration和@EnableWebSecurity注解,我们可以创建自定义的安全配置类。 四、实战应用 1. *...
描述中提到的"summer-security.zip"可能是一个错误,因为通常情况下,"Spring Security"是一个广泛使用的Java Web应用程序的身份验证和授权库。Spring Security提供了一套全面的解决方案来保护Web应用,包括登录认证...
Spring AOP通过代理模式实现,有JDK动态代理和CGLIB代理两种方式。开发者可以定义切入点表达式和通知来定义切面,实现代码的解耦。 3. **Bean的初始化和销毁**: Spring容器允许自定义bean的初始化和销毁方法,...
"spring-security-jwt-example"是一个项目,它演示了如何将Spring Security与JWT技术结合,实现安全的身份验证和授权流程。 **1. Spring Security基础** Spring Security是Spring生态系统中的一个模块,提供了一套...
- **Mono和Flux**:Reactor提供的两种类型,Mono用于处理单个值,Flux用于处理0至多个值的序列。 - **Reactor Dispatcher**:处理事件的调度器,如Schedulers.boundedElastic(),用于线程池管理。 - **WebFilter...
- **机制**:Spring Cloud 提供了两种负载均衡方式:客户端负载均衡(如 Ribbon)和服务端负载均衡(如 Nginx)。客户端负载均衡由客户端应用自己完成服务实例的选择,而服务端负载均衡则由专门的负载均衡器完成。 ...
在现代Web应用开发中,RESTful API已经成为服务端与客户端交互的主要方式,它强调资源的表述性和状态转移,使得系统设计更加简洁、高效。本文将深入探讨如何利用Spring Boot和Sureness框架构建一个面向REST API资源...
- **实现机制**:Spring AOP 主要通过代理实现,分为静态代理和动态代理两种形式。 - **静态代理**:在编译期生成代理类。 - **动态代理**:运行时动态创建代理对象。 - **切面术语**: - **切点**:匹配连接点的...