gpt4 book ai didi

java - Spring MVC Controller 方法的自定义授权/安全性

转载 作者:行者123 更新时间:2023-12-01 13:00:04 25 4
gpt4 key购买 nike

希望创建自定义实现来授权请求​​。

我正在评估避免在 Controller 中的每个方法上使用注释的选项。相反,我正在探索通过过滤器集中此功能的可能性,该过滤器检查登录用户是否具有 URL 所需的权限

我们正在使用 Spring 3.2.5.RELEASE

我打算创建一个数据库表,其中包含权限和相关 URL 之间的映射。

我正在寻找一种方法来获取当前 URL 的请求映射信息。

对于 E-g :在我的数据库中,我有:

    URL=/view/{id} , permission=VIEW_USER

如果当前 URL 是:

    /app/user/view/1

,用

注释的方法
    @RequestMapping(value = "/view/{id}", method = RequestMethod.GET)

将被调用。但在此之前,我需要验证登录的用户是否有查看用户详细信息的权限。

在我的过滤器中,我可以获取当前的URL (/app/user/view/1) ,如何获取相应的映射(/view/{id}) ?是否有一种机制可以将 URL 与其相应的 MVC 请求映射相匹配?

我已经查看/正在查看 SO 上的相关帖子,也查看了 Spring 代码,但尚未找到方法。

最佳答案

如果你想这样做,你可以注册 MVC 拦截器而不是 servlet 过滤器。创建一个扩展 HandlerInterceptorAdapter 的类,并在 preHandle 方法中您将可以访问 Controller 的方法及其注释。拦截器的 Prehandle 方法可能如下所示:

@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
if (handler instanceof HandlerMethod) {
HandlerMethod method = (HandlerMethod) handler;
if (method.getMethod().isAnnotationPresent(RequestMapping.class)) {
RequestMapping rqm = method.getMethodAnnotation(RequestMapping.class);
String[] urlMappings = rqm.value();
//do security logic
}
}
...
}

然后需要注册拦截器。如果您使用 xml 配置,则如下所示:

<mvc:interceptors>
<bean class="com.example.MySecurityInterceptor" />
...
</mvc:interceptors>

请注意,您的方法会很困难,您需要处理 Spring 支持的所有请求映射情况。例如,在类级别进行注释的@RequestMapping。或者在 Controller 的父类等上注释@RequestMapping

关于java - Spring MVC Controller 方法的自定义授权/安全性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23574442/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com