Spring安全性:仅接受来自特定域的请求

时间:2014-06-29 04:02:47

标签: spring-mvc spring-security

在Spring安全应用程序中,如何确定该请求仅来自某个特定域?

在我的spring控制器中有一个向DB插入数据的处理程序,我希望只有当来自xyz.com的请求被拒绝时才应该从特定域abc.com调用此处理程序。

我检查THIS,当我这样做时,firefox show The page isn't redirecting properly 这是正确的行为吗?或者是否有其他方式拒绝其他域名请求?

我的应用正在http://localhost:8084/上运行。

如果我通过access="hasIpAddress('127.0.0.2/8085'),则显示

09:30:11,426 DEBUG ExceptionTranslationFilter:165 - Access is denied (user is anonymous); redirecting to authentication entry point
org.springframework.security.access.AccessDeniedException: Access is denied

如果我通过access="hasIpAddress('127.0.0.1/8085')它会抛出

java.lang.ArrayIndexOutOfBoundsException: 4
    at org.springframework.security.web.util.IpAddressMatcher.matches(IpAddressMatcher.java:75)
    at org.springframework.security.web.util.IpAddressMatcher.matches(IpAddressMatcher.java:43)
    at org.springframework.security.web.access.expression.WebSecurityExpressionRoot.hasIpAddress(WebSecurityExpressionRoot.java:33)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)

1 个答案:

答案 0 :(得分:1)

首先,您必须正确使用hasIpAddress。注意,'/'之后的内容不是端口,而是子网。你得到的第二个例外(IndexOutOfBounds)是因为你不应该传递4个项目......

请在此处阅读:http://forum.spring.io/forum/spring-projects/security/95303-how-to-use-hasipaddress