2
我使用下面的配置的控制器的方法:春季安全hasIpAddress問題
@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.WebSec urityExpressionRoot。
你知道爲什麼它不查找WebSecurityExpressionRoot中的方法嗎?
非常感謝,
當你閱讀春季安全文檔時,並不明顯。我會把我的筆記放在這裏,你仍然可以用PreAuthorize和spel來做到這一點,儘管這並沒有考慮代理服務器或負載平衡器等事情。 User @PreAuthorize(「#request.getRemoteAddr()。equals('127.0.0.1')」)並將HttpServletRequest請求變量放入方法參數 – chrismarx 2015-06-23 17:52:23