如何在spring-security中切换角色

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在spring-security中切换角色相关的知识,希望对你有一定的参考价值。

几天来我一直在苦苦思索如何通过Spring Security在Spring Boot应用程序中实现与一个userAccount的角色之间的切换。在我的案例中有一个例子:

我有一个类[UserAccount] {Id,username,password,isActive}和[Role] {Id,roleName,description},我正在用一些@Secured RESTful方法实现一个成功的简单登录系统。 我的角色是:管理员,老师和学生

现在,我想为每个角色(例如StudentUser,TeacherUser,AdminUser)或类似的东西创建一个类,以便能够添加一些在所有用户之间不常见的新属性。 例如:

  • 学生用户将与成绩,课程,考试等相关。
  • 教师用户将与部门,课程,研究团队等相关。
  • 或者在某些情况下,具有多个角色(教师和学生)的用户(如博士生)想要在他的前端空间(不同视图)之间切换。 我该如何以最佳和最有效的方式处理这个问题?谢谢。
  • 答案

    问题是你想要将几个实体绑定在一起 - 帐户,人,角色。我建议你把它们分开:

    • 人 - 只是名称等基本数据
    • 人可以拥有一个帐户。没有帐户的人无法登录。
    • 学生/教师/管理员拥有/是个人 - 学生/教师/管理员包含特定于每个角色的信息。在设计这种关系时,有必要弄清楚一个人是否可以拥有相同类型的更多学生/教师/管理员档案(如果一个人有多个学习,那该怎么办)。如果将其设计为一对一关系,则可以将其建模为Java中的继承(Student / Teacher / Admin是Person)。

    在Spring Security中,根据帐户人员拥有的(活动)学生/教师/管理员关系分配GrantedAuthority-s(角色)。

    在您的前端,您将看到登录的人员具有哪些角色,您可以允许他们在基于角色的视图之间切换。

    更新

    为了澄清,这是类图的样子:

    Possible class diagram

    您不需要为角色分别创建一个类/表,因为角色由给定Person的Student / Teacher / Admin对象的存在决定。但是如果你出于某些原因需要它,你可以在那里添加它 - 可能Account会有1..n角色。

    另一答案

    谢谢大家,我解决了这个问题:继承自Profile,每个角色都拥有自己的个人资料类,因此用户将拥有多个个人资料。

    以上是关于如何在spring-security中切换角色的主要内容,如果未能解决你的问题,请参考以下文章

    在tomcat中显示Spring-security的SQL错误

    如何使用 Spring Security 获取当前用户的角色

    Spring-Security自定义登录页&inMemoryAuthentication验证

    如何为 Spring Security 创建类型安全的用户角色?

    如何自动切换角色策略(Terraform)

    spring-security saml2:如何获取当前用户?