我正在努力使用我的Spring Security配置,到目前为止我无法使其工作。需要你的帮助。
这是我的配置:
@Configuration
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class MethodSecurityConfig extends GlobalMethodSecurityConfiguration {
@Override
protected MethodSecurityExpressionHandler createExpressionHandler() {
DefaultMethodSecurityExpressionHandler expressionHandler =
new DefaultMethodSecurityExpressionHandler();
expressionHandler.setPermissionEvaluator(new CustomPermissionEvaluator());
return expressionHandler;
}
}
这是CustomPermissionEvaluator
:
public class CustomPermissionEvaluator implements PermissionEvaluator {
@Override
public boolean hasPermission(Authentication auth, Object targetDomainObject, Object permission) {
return true;
}
@Override
public boolean hasPermission(Authentication auth, Serializable targetId, String targetType, Object permission) {
return true;
}
}
这是控制器:
@PreAuthorize("hasPermission(#test, 'write')")
@PostMapping("/test")
public Result saveTest(@RequestBody Test test) {
return Result.build();
}
一切看起来都很简单,但是当我请求其余的API时,得到以下异常:
.m.m.a.ExceptionHandlerExceptionResolver : Resolved exception caused by Handler execution: org.springframework.security.authentication.AuthenticationCredentialsNotFoundException: An Authentication object was not found in the SecurityContext
任何人都可以给我任何关于做什么的暗示?谢谢〜
错误是指缺少Authentication
对象而不是Authorization
。你有没有定义一个UserDetailsService
,你确定你的身份验证成功了吗?
根据this blog,您可以通过定义获取AuthenticationManagerBuilder
的方法来连接userDetailService。在此构建器上,您可以定义一个简单的inMemoryAuthentication
进行测试,或者连接AuthenticationProvider
或UserDetailService
的实现。