2

我在控制器中有一个使用以下配置的方法:

@RequestMapping(value = "/encore/{userName}/{token}", method = RequestMethod.GET)
@ResponseBody
@PreAuthorize("hasIpAddress('192.168.1.2/24')")
public EncoreAccount validateUserRequest(HttpServletRequest request,
    @PathVariable(value = "userName") String userName,
    @PathVariable(value = "token") String token) {
}

我在 webmvc-config.xml 中有这个

<security:global-method-security pre-post-annotations="enabled" />

但是当我运行它时,我得到以下异常:

Caused by: org.springframework.expression.spel.SpelEvaluationException: EL1004E:(pos 0): Method call: Method hasIpAddress(java.lang.String) cannot be found on org.springframework.security.access.expression.method.MethodSecurityExpressionRoot type

我知道 hasIpAddress() 在 org.springframework.security.web.access.expression.WebSecurityExpressionRoot 中。

你知道为什么它不查找 WebSecurityExpressionRoot 中的方法吗?

非常感谢,

4

1 回答 1

2

hasIpAddress()表达式可用于网​​络安全

org.springframework.security。网络.access.expression.WebSecurityExpressionRoot

@PreAuth用途

org.springframework.security.access.expression。方法.MethodSecurityExpressionRoot

hasIpAddress()您可以使用但不是方法来保护 URL(拦截) 。

于 2013-05-03T07:08:59.940 回答