如何获得当前用户权限/角色并根据Spring Security中的角色进行一些计算

时间:2018-10-15 10:47:40

标签: java spring-boot spring-security

我正在做一个关于Spring Boot安全性的库管理系统项目。 为了根据角色计算已发行书籍的罚款,我希望在借书后使用当前用户角色。 当前用户名,角色book_id和fine将存储在其他表中。 我能够获得当前用户的用户名,但无法获得当前用户的角色。

有人可以帮我吗!

//控制器类的一部分

 @RequestMapping("/homepage/borrowBook")
            public String addBookings(Bookings bk, HttpServletRequest rqst) {
                rqst.setAttribute("mode", "MODE_BORROW");
                return "homepage";
            }
    @PostMapping("/homepage/save-borrow")
        public String saveBorrow(Bookings bk, HttpServletRequest rqst, Authentication auth) {
            rqst.setAttribute("mode", "MODE_BORROW");
            if (BookRepo.exists(bk.getBook_id())) {
                bk.setUser(auth.getName());

/////here i want the current user authority to be saved/checked.
                bookingsRepo.save(bk);
                return "homepage";
            } else {
                rqst.setAttribute("error", "Book doesn't exist");

                return "homepage";
            }
        }

2 个答案:

答案 0 :(得分:1)

您可以使用Authentication.getAuthorities()来获取当前登录用户的角色。

答案 1 :(得分:0)

您可以使用SecurityContextHolder或通过控制器上的注入Authentication对象获得授权。

通过SecurityContextHolder查找以下内容

Authentication auth = SecurityContextHolder.getContext().getAuthentication();

Collection<SimpleGrantedAuthority> list = (Collection<SimpleGrantedAuthority>) auth.getAuthorities();

for (SimpleGrantedAuthority permission : list) {
     System.out.println(permission.getAuthority());
}

如果您需要有关登录用户的任何其他信息,则可以按以下方式访问UserDetails

User userDetails = (User) auth.getPrincipal();