我通过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。
答案 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/