WebApi中的Spring授权逻辑

时间:2017-04-25 16:06:05

标签: java spring spring-mvc

我用Spring建立一个Web Api,主要是为了让学生,老师和班级等等。

只有班上的老师才能添加学生。

到目前为止,我使用他们的用户名和密码对用户进行身份验证,但现在我还要检查它是否是尝试添加学生的班级老师。我应该在控制器上还是在服务上执行此操作?此外,我必须访问数据库进行此检查。

2 个答案:

答案 0 :(得分:0)

您的Authentication界面有一组权限。这些是您的角色,您可以在此处添加特定的类访问权限。然后,您可以根据需要保护控制器方法。

您可以创建自己的GrantedAuthority课程来实现此目标。

您的AuthenticationProvider会在用户进行身份验证时将这些角色添加到用户。

要在控制器中获取当前经过身份验证的用户以及允许他们使用的类:

Authentication auth = SecurityContextHolder.getContext().getAuthentication();
List<GrantedAuthority> authorities = auth.getAuthorities();

但是如果你想用实体来做,那么这个班有很多学生和一个老师,这样就可以建议班级实体对教师实体有一个ONEOoOne,对学生实体有一个toToMany。然后一切都由班级控制。您可能会有一个具有addStudent()方法的类服务,然后可以在这里完成对教师的检查。

答案 1 :(得分:0)

我会在教师模型上创建一对多/一对一的关系,然后使用一种服务方法来检查相关教师是否在所述列表中。我会使用该服务,因为它们应该提供业务方法。然后可能只是在put / post调用中从控制器调用该方法。