我想在Spring Security中使用<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-htmlunit-driver</artifactId>
<version>2.52.0</version>
</dependency>
和SpEL,就像http://forum.spring.io/forum/spring-projects/security/100708-spel-and-spring-security-3-accessing-bean-reference-in-preauthorize中的示例一样
但是在Spring Security 4.1.4中使用它时,这对我不起作用。以下是我的示例代码:
bean类:
$request = new HttpRequest();
$request->setUrl('https://demo.mifinitypay.com/api/oauth/token');
$request->setMethod(HTTP_METH_POST);
$request->setHeaders(array(
'postman-token' => '6396dfb7-540b-0e7d-7333-5d0eeff4d606',
'cache-control' => 'no-cache',
'authorization' => 'Basic username:password encoded using Base64',
'x-api-version' => '1',
'accept' => 'application/json',
'content-type' => 'application/x-www-form-urlencoded'
));
$request->setContentType('application/x-www-form-urlencoded');
$request->setPostFields(array(
'grant_type' => 'client_credentials'
));
try {
$response = $request->send();
echo $response->getBody();
} catch (HttpException $ex) {
echo $ex;
}
在控制器中:
@PreAuthorize
错误讯息:
无法评估表达式&#39; accessBean.getPermision()&#39;
似乎我不能像上面那样使用SpEL,那么如果我使用的是此版本的Spring Security,我该如何处理?
答案 0 :(得分:2)
您必须使用@
,请参阅Spring Security Reference:
参考网络安全表达式中的Bean
如果您希望扩展可用的表达式,可以轻松引用您公开的任何Spring Bean。例如,假设您有一个名为
webSecurity
的Bean,其中包含以下方法签名:public class WebSecurity { public boolean check(Authentication authentication, HttpServletRequest request) { ... } }
您可以使用以下方法参考该方法:
<http> <intercept-url pattern="/user/**" access="@webSecurity.check(authentication,request)"/> ... </http>
或Java配置
http .authorizeRequests() .antMatchers("/user/**").access("@webSecurity.check(authentication,request)") ...