gpt4 book ai didi

java - 使用 Spring Security 检查额外参数

转载 作者:太空宇宙 更新时间:2023-11-04 06:19:11 25 4
gpt4 key购买 nike


请在Spring Security中给出提示,如何在用户登录时检查附加参数。
例如,不仅要检查“用户名”和“密码”,还要检查他是否通过电子邮件链接确认注册;
所有数据都存储在数据库中,我可以通过 UserDetailsS​​ervice 的实现轻松获取它;
但是如何让安全服务关注附加参数“isValidated”呢?
我现在使用 Spring 3.2.0;

最佳答案

实现此目的的一种方法是创建自定义 AuthenticationProvider或扩展现有的。在您的情况下,扩展例如 DaoAuthenticationProvider 并在 additionalAuthenticationChecks() 方法中放置用于检查帐户是否已确认的逻辑就足够了。

这是一个例子:

public class CustomAuthenticationProvider extends DaoAuthenticationProvider {

@Override
protected void additionalAuthenticationChecks(UserDetails userDetails, UsernamePasswordAuthenticationToken authentication) throws AuthenticationException {
// Perform the checks from the super class
super.additionalAuthenticationChecks(userDetails, authentication);

// Cast the UserDetails to the implementation you use
User user = (User) userDetails;

// Check the confirmed status
if (!user.isAccountConfirmed()) {
throw new AccountNotConfirmedException("Account is not confirmed yet.");
}
}

public static class AccountNotConfirmedException extends AuthenticationException {
public AccountNotConfirmedException(String message) {
super(message);
}
}

}

您的UserDetails实现应包含有关帐户确认状态的信息。您可以在 UserDetailsS​​ervice 的实现中映射此信息。

选项 2

编辑:现在我看看,第一个解决方案有点过于复杂。您无需使用自定义 AuthenticationProvider 即可轻松解决此问题。如果帐户未确认,只需确保 UserDetails 实现的 isEnabled() 返回 false 即可。如果 enabled 属性为 false 将不允许身份验证(这由 Spring Security 自动处理)。

例如,如果您想在 AuthenticationFailureHandler 中显式处理 AccountNotConfirmedException,第一个解决方案可能仍然有用。

关于java - 使用 Spring Security 检查额外参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27658030/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com