我有一个 Spring MVC Web 应用程序,以 Thymeleaf 作为模板引擎,并使用 Spring Security 来管理登录阶段。
我的用户可以使用不同的角色(ROLE_ADMIN、ROLE_USER 和 ROLE_GUEST)登录。 此外,具有角色 ROLE_USER 的用户是一个或多个工作组(一组用户)的一部分,并且在工作组中,他/她可以使用不同的权限:WG_ADMIN、WG_USER、WG_GUEST。 每个权限都允许工作组用户对工作组资源执行某些操作。
现在我有一组 View ,并希望根据用户的角色和工作组权限来管理对页面和页面元素的授权。
使用 Spring MVC 和 Thymeleaf 完成工作的规范方法是什么?
谢谢
最佳答案
您需要 @PreAuthorize 和 @Secured 的组合。我会告诉你有什么区别。您的 Controller 方法应使用 @PreAuthorize 进行注释。这样,如果用户没有角色,系统会根据您的安全设置重定向用户。
使用@Secured,如果用户没有角色,则不会执行该方法。所以你应该在服务层使用@Secured。
您需要这样的东西。
@PreAuthorize(hasRole('ROLE_ADMIN'||'ROLE_USER'))
@RequesMapping(value="/doblahblah")
public String doBlahBlahh(){
methodOnlyAdminCanExecute();
methodOnlyUserCanExecute();
}
@PreAuthorize(hasRole('ROLE_USER'))
@RequesMapping(value="/douserstuff")
public String douserstuff(){
methodOnlyAdminCanExecute();
methodOnlyUserCanExecute();
}
服务层:
public class adminCode{
@Secured("ROLE_ADMIN")
public void doAdminStuff(){
//dostuff
}
}
现在,即使在第二个 Controller 方法中,调用该方法,它也不会执行,@Secured 注解将被处理,该方法也不会执行。
这是我从你的问题中了解到的。如果这不是您要查找的内容,我将删除我的答案。
关于java - 根据用户角色和权限显示不同的网页和元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30894333/