java - Spring MVC : IP restriction for a single controller method

标签 java api spring-mvc spring-security

我需要隐藏来自与特定 IP 不同的 IP 的请求的特定 API。 例如,如果我尝试使用它并且我的 IP 是 192.168.1.1,那么这应该可以工作,但如果我的 IP 是 192.168.1.2,则不行。

@RequestMapping(value = "/test/{id}", method = RequestMethod.GET)
@ResponseBody
@IpRestricted
public void download(@PathVariable("id") String id) {
  ...
}

我读到我可以让它创建一个特定的注释,在本例中我称之为“@IpRestricted”,但是我该如何继续呢?有更好的解决方案吗?

最佳答案

然后我意识到我可以在不使用 spring security 的情况下完成它。 我做了这样的注释:

@Retention(RetentionPolicy.RUNTIME)
public @interface IpRestricted {
}

然后我检查 HandlerInterceptor preHandle 方法中的请求 IP 地址:

public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    if (handler instanceof HandlerMethod) {
        HandlerMethod method = (HandlerMethod)handler;
        if (method.getMethodAnnotation(IpRestricted.class)!=null) {
            if (!request.getRemoteAddr().equals("192.168.1.1")) {
                throw new UnauthorizedException("Ip not authorized");
            }
        }
    }
    [....]
}

下载方法:

@RequestMapping(value = "/test/{id}", method = RequestMethod.GET)
@ResponseBody
@IpRestricted
public void download(@PathVariable("id") String id) {
   ...
}

就是这样!

关于java - Spring MVC : IP restriction for a single controller method,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32581659/

相关文章:

java - 简单的 hello world bundle (osgi) 失败

Java日期计算

java - Swing MVC - 事件传播和数据共享

用于获取内存和文件句柄计数的 C API

java - 是否有任何与 Spring 集成的 Java PDF 库?

java - Spring 安全: Create Users

java - 登录我的 Java Web 应用程序时,我被定向到登录表单使用的 CSS,如何解决这个问题?

java - 是否有用于搜索 Java API 的 Mac OX 应用程序?

api - 如何对 API 进行速率限制

java - 模拟中的 Spring 值注入(inject)