Mah*_*leh 6 spring spring-mvc spring-security
我在注册后使用以下方法进行编程登录
private void autoLogin(User user,
HttpServletRequest request)
{
GrantedAuthority[] grantedAuthorities = new GrantedAuthority[] { new GrantedAuthorityImpl(
"ROLE_ADMIN") };
UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken(
user.getUsername(), user.getPassword(),grantedAuthorities);
// generate session if one doesn't exist
request.getSession();
token.setDetails(new WebAuthenticationDetails(request));
Authentication authenticatedUser = authenticationManager.authenticate(token);
SecurityContextHolder.getContext().setAuthentication(authenticatedUser);
}
Run Code Online (Sandbox Code Playgroud)
用户是经过身份验证但总是有ROLE_ANONYMOUS我不知道为什么?有任何想法吗 ?
这种行为看起来很奇怪.Javi建议手动将安全上下文保存到会话中,但它应该由Spring Security自动完成SecurityContextPersistenceFilter.
一个可能的原因,我可以想像是filters = "none"在<intercept-url>你的登记处理的页面.
filters = "none"禁用指定URL的所有安全筛选器.如您所见,它可能会干扰Spring Security的其他功能.因此,更好的方法是保持启用过滤器,但配置它们以允许所有用户访问.你有几个选择:
access属性(即没有<http use-expressions = "true" ...>):
access = "ROLE_ANONYMOUS" 允许访问未经身份验证的用户,但拒绝经过身份验证的用户access = "IS_AUTHENTICATED_ANONYMOUSLY, IS_AUTHENTICATED_FULLY, IS_AUTHENTICATED_REMEMBERED"<http use-expressions = "true" ...>),您只需编写access = "true"以允许所有用户访问(但其他人也<intercept-url>应使用此语法).| 归档时间: |
|
| 查看次数: |
17443 次 |
| 最近记录: |