【问题标题】:Spring isUserInRole dont work with role from MySQL DBSpring isUserInRole 不适用于 MySQL DB 中的角色
【发布时间】:2017-11-07 12:58:32
【问题描述】:

我的 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 的问题是什么?

【问题讨论】:

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


    【解决方案1】:

    也许你可以试试这个:

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

    【讨论】:

      【解决方案2】:

      也许您正在使用 loadUserAuthorities Custom ....并且您从 spring 3 迁移到 spring 4 ..........因此,您必须从 loadUserAuthorities 的数据库中的列表中添加前缀 ROLE_ 因为 request.isUserInRole("ADMIN") 转换为 ROLE_ADMIN 并与您的列表进行比较

      【讨论】:

        猜你喜欢
        • 2013-04-13
        • 1970-01-01
        • 2014-11-02
        • 2015-09-04
        • 2020-08-27
        • 2021-11-23
        • 2016-06-23
        • 2013-10-31
        相关资源
        最近更新 更多