根据用户角色和权限显示不同的网页和元素

时间:2015-06-17 14:19:26

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

我有一个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完成任务的规范方法是什么?

谢谢

2 个答案:

答案 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的注释将被处理,并且该方法不会执行。

这是我从你的问题中理解的。如果这不是你想要的,我会删除我的答案。