我的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
的问题是什么?
答案 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并与列表进行比较