对动态端点的动态访问



我正在编写一个spring-mvc web应用程序,我正在集成spring-security来处理所有与用户相关的授权内容。我正在做一个类似大学的系统(在那里你可以登录并看到你的课程,公告等),但问题是如下:我有两种类型的角色,一个是在用户表下声明的(用户是或不是管理员),然后有一个用户和课程之间的关系(它在课程中的角色,例如学生,老师等)。

问题是根据课程我在(假设/课程/5)用户可以(或不能,取决于关系userId | courseId | roleId)成为一名教师(例如,一个老师在课程应该能够发布公告),所以我应该找到一个方法来得到从URL, courseId打电话得到的刀是当前登录用户的角色在这个过程和做出决定基于(例如,重定向到具有比学生视图更多功能的JSP视图)。

我认为有两种方法:

  1. 实现一个自定义过滤器,将其添加到检查此信息的身份验证/授权链中。这种方法的缺点是,您需要知道根据请求调用哪个DAO,这可能不是一段很好的代码。此外,如果用户被授权使用该课程,您很可能会两次调用DAO(在授权期间和稍后在业务逻辑中)。更多详细信息:https://www.baeldung.com/spring-security-custom-filter.
  2. 您可以在应用常规业务逻辑之前检查这一点。在处理HTTP请求的服务中,您将检查用户是否被授权使用该课程,如果不是,则抛出异常或您认为合适的任何其他方法。这样做的好处是不必重复调用DAO(获取课程详细信息)。缺点是您的授权逻辑将与常规业务逻辑混杂在一起。虽然有些人可能不同意,但我认为这是可以接受的,因为检查用户是否被授权参加课程也是常规业务逻辑的一部分。

说了这么多,我还是选择第二个选项。

最新更新