我在春季UsernamePasswordAuthenticationFilter中检查身份验证的位置在哪里?

时间:2015-06-09 14:01:57

标签: spring spring-security

我通过json对象从客户端应用程序传递用户名和密码,我正在使用UsernamePasswordAuthenticationFilter来验证用户,如问题https://stackoverflow.com/a/19572145/4070142的回答Spring Security and JSON Authentication中建议的那样。

我的问题是我在哪里检查身份验证?我的意思是我在哪里放if(username.equals("user123")&&password.equals("password123")) {return true;}

有关代码,请参阅上述链接问题的回复https://stackoverflow.com/a/19572145/4070142

1 个答案:

答案 0 :(得分:0)

在身份验证提供程序中进行实际的用户名和密码比较。 UsernamePasswordAuthenticationFilter获取username / pwd并传递给authenticationManager,后者将其委托给authenticationProvider。在您的情况下,您需要添加自定义身份验证提供程序,如下所示:

@Component
public class CustomAuthenticationProvider implements AuthenticationProvider {

@Override
public Authentication authenticate(Authentication authentication) throws AuthenticationException {
    String username = authentication.getName();
    String password = authentication.getCredentials().toString();
    if(username.equals("user123") && password.equals("password123")) {
        List<GrantedAuthority> grantedAuths = new ArrayList<>();
        grantedAuths.add(new SimpleGrantedAuthority("ROLE_USER")); //assign some role
        Authentication auth = new UsernamePasswordAuthenticationToken(username, password, grantedAuths);
        return auth; //return Authentication object, not true
    } else {
        return null;
    }
}

@Override
public boolean supports(Class<?> authentication) {
    return authentication.equals(UsernamePasswordAuthenticationToken.class);
}

}

在我们的配置中声明新的身份验证提供程序:

<authentication-manager>
    <authentication-provider ref="customAuthenticationProvider"/>
</authentication-manager>

参考:
https://danielkaes.wordpress.com/2013/02/20/custom-authentication-provider-in-spring/