Spring isUserInRole不能使用MySQL DB中的角色

时间:2017-11-07 12:58:32

标签: java mysql spring spring-mvc spring-security

我的Spring应用程序使用一个包含用户和角色的数据库,并在我的登录页面中使用两者的交叉。

要将用户重定向到不同的角色页面,我使用控制器

@Controller
public class StartController {
    @RequestMapping("/default")
    public String defaultAfterLogin(HttpServletRequest request) {
        if (request.isUserInRole("ADMIN")) {
            return "redirect:/admin/";
        }
        return "redirect:/user/";
    }
}

但我尝试使用“admin”用户,然后重定向到/user

打印request.getUserPrincipal().toString()

Principal: org.springframework.security.core.userdetails.User@79225df7:
Username: admin@test.de; 
Password: [PROTECTED]; 
Enabled: true; 
AccountNonExpired: true; 
credentialsNonExpired: true; 
AccountNonLocked: true; 
Granted Authorities: ADMIN; 
Credentials: [PROTECTED]; 
Authenticated: true; 
Details: org.springframework.security.web.authentication.WebAuthenticationDetails@b364:
RemoteIpAddress: 0:0:0:0:0:0:0:1; 
SessionId: null; 
Granted Authorities: ADMIN

重定向到/admin的问题是什么?

2 个答案:

答案 0 :(得分:0)

也许你可以试试这个:

boolean hasAuthorityAdmin = false;

hasAuthorityAdmin = SecurityContextHolder.getContext().getAuthentication().getAuthorities().contains(AuthoritiesConstants.ADMIN);
if (hasAuthorityAdmin) {
    return "redirect:/admin/";
}
return "redirect:/user/";

答案 1 :(得分:0)

也许您正在使用loadUserAuthorities自定义....并且您从春季3迁移到Spring 4 ..........因此您必须在数据库中添加前缀ROLE_来自loadUserAuthorities beacause request.isUserInRole(" ADMIN")转换为ROLE_ADMIN并与列表进行比较