您的位置:首页 > 编程语言 > Java开发

spring security抛出AuthenticationException异常的原因

2013-12-04 16:10 423 查看
可能是因为密码不正确,特别是密码使用md5或者其它的加密算法加密之后,更是如此。

还有一点:

在UsernamePasswordAuthenticationFilter的子类中的attemptAuthentication方法中,只要去验证你自己的逻辑就可以了,不要在这里验证用户名,密码是否正确,因为这是UserDetailsService要干的事情。

比如我的attemptAuthentication方法中就是这样:

@Override
public Authentication attemptAuthentication(HttpServletRequest request, HttpServletResponse response) throws AuthenticationException {
if (!request.getMethod().equals("POST")) {
throw new AuthenticationServiceException("Authentication method not supported: " + request.getMethod());
}
//检测验证码
checkValidateCode(request);
String username = obtainUsername(request);
String password = obtainPassword(request);

//为了辨别从前台进入的,还是从后台进入的
String type=request.getParameter(ENTRY);
request.getSession().setAttribute(USER_ENTRY, type);
if("bg".equals(type))
{
username="bg_"+username;
}else if("fg".equals(type))
{
username="fg_"+username;
}

//这里的username会传给UserDetailsService的loadUserByUsername方法,作为loadUserByUsername的参数。
UsernamePasswordAuthenticationToken authRequest = new UsernamePasswordAuthenticationToken(username, password);

// 允许子类设置详细属性
setDetails(request, authRequest);

// 运行UserDetailsService的loadUserByUsername 再次封装Authentication
AuthenticationManager authenticationManager = this.getAuthenticationManager();
Authentication authentication=authenticationManager.authenticate(authRequest);
return authentication;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐