我有一个Spring MVC Web应用程序,Thymeleaf作为模板引擎,Spring Security负责管理登录阶段。
我的用户可以使用不同的角色登录(ROLE_ADMIN,ROLE_USER和ROLE_GUEST)。 此外,具有角色ROLE_USER的用户是一个或多个工作组(一组用户)的一部分,并且在工作组中,他/她可以使用不同的权限:WG_ADMIN,WG_USER,WG_GUEST。 每个权限允许WG用户对WG资源执行某些操作。
现在我有一组视图,并希望根据用户的角色和工作组权限来管理页面和页面元素的授权。
使用Spring MVC和Thymeleaf完成任务的规范方法是什么?
谢谢
答案 0 :(得分:1)
您可以使用以下内容:
<div sec:authorize="hasRole('ROLE_ADMIN')">
Hi, <span sec:authentication="principal.name"></span>
</div>
答案 1 :(得分:1)
您需要@PreAuthorize和@Secured的组合。我会告诉你有什么区别。您的控制器方法应使用@PreAuthorize进行注释。这样,如果用户没有ROLE,则会根据您的安全设置重定向用户。
对于@Secured,如果用户没有ROLE,则不执行该方法。所以你应该在服务层使用@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
}
}
现在,即使在第二个控制器方法中调用此方法,它也不会执行,@ Secure的注释将被处理,并且该方法不会执行。
这是我从你的问题中理解的。如果这不是你想要的,我会删除我的答案。