具有 Spring Security 和 Java Config 的自定义身份验证提供程序
Posted
技术标签:
【中文标题】具有 Spring Security 和 Java Config 的自定义身份验证提供程序【英文标题】:Custom Authentication provider with Spring Security and Java Config 【发布时间】:2014-05-01 15:40:38 【问题描述】:如何使用 Spring Security 和 Java 配置来定义自定义身份验证提供程序? 我想在我自己的数据库上执行登录检查凭据。
【问题讨论】:
spring 安全文档为您提供所需的所有信息 - 如何配置配置的 XML 和端点。此外,您必须支持“创建帐户”、“忘记密码”等流程,您可以使用此开源:github.com/OhadR/oAuth2-sample/tree/master/authentication-flows 【参考方案1】:以下是您需要的(CustomAuthenticationProvider
是您的实现,需要由 Spring 管理)
@Configuration
@EnableWebMvcSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter
@Autowired
private CustomAuthenticationProvider customAuthenticationProvider;
@Override
protected void configure(HttpSecurity http) throws Exception
/**
* Do your stuff here
*/
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception
auth.authenticationProvider(customAuthenticationProvider);
【讨论】:
除了现有的身份验证提供者之外,是否可以注册自定义身份验证提供者? @Seppl 我不认为这样的东西是开箱即用的(虽然我很容易被误会),但我很确定这样的东西可以相对容易地实现。查看this 根据 Spring Docu,auth.authenticationProvider()
将“根据传入的自定义 AuthenticationProvider 添加身份验证”。我猜你会以这种方式获得一堆提供者。【参考方案2】:
如baeldung.com 所示,定义您的身份验证提供程序如下:
@Component
public class CustomAuthenticationProvider implements AuthenticationProvider
@Override
public Authentication authenticate(Authentication authentication)
throws AuthenticationException
String name = authentication.getName();
String password = authentication.getCredentials().toString();
if (shouldAuthenticateAgainstThirdPartySystem(username, password))
// use the credentials
// and authenticate against the third-party system
return new UsernamePasswordAuthenticationToken(
name, password, new ArrayList<>());
else
return null;
@Override
public boolean supports(Class<?> authentication)
return authentication.equals(
UsernamePasswordAuthenticationToken.class);
下面的代码是对应的java配置:
@Configuration
@EnableWebSecurity
@ComponentScan("org.project.security")
public class SecurityConfig extends WebSecurityConfigurerAdapter
@Autowired
private CustomAuthenticationProvider authProvider;
@Override
protected void configure(
AuthenticationManagerBuilder auth) throws Exception
auth.authenticationProvider(authProvider);
@Override
protected void configure(HttpSecurity http) throws Exception
http.authorizeRequests().anyRequest().authenticated()
.and()
.httpBasic();
【讨论】:
您只是直接从baeldung.com/spring-security-authentication-provider 复制的。虽然答案肯定有帮助,但归属来源也是必要的。以上是关于具有 Spring Security 和 Java Config 的自定义身份验证提供程序的主要内容,如果未能解决你的问题,请参考以下文章
具有角色的经过身份验证的用户的 Spring Security Java 配置
具有 CAS 身份验证和自定义授权的 Spring Security
具有 Spring Security 的公共和私有 REST API