Kyl*_*yle 6 java spring spring-mvc spring-security
我有一个"Foo"控制器自动装配"Foo"服务.
现在,当我向控制器添加PreAuthorize注释时,view方法工作正常,PreAuthorize标记仅授予具有ADMIN权限的用户的访问权限,但ResponseBody方法(getFoo)不能按预期工作.
使用PreAuthorize批注时,getFoo方法无法正确自动装配/实例化fooService对象,该对象的值为null,导致NPE(空指针异常).
问题概述: 当AJAX GET请求调用getFoo方法时,fooService为null(导致NPE).
但是,在注释掉@PreAuthorize时,调用getFoo时fooService不再为null.
...
这是代码:
Foo控制器
@Controller
@RequestMapping("/foo")
@PreAuthorize("hasAuthority(T(com.foo.security.Authorities).ADMIN)")
public class FooController {
@Autowired
private FooService fooService;
@RequestMapping(value = "/view")
public String view(@AuthenticationPrincipal Principal principal) {
return "view";
}
@RequestMapping(value = "/getFoo")
@ResponseBody
public Foo getFoo() {
fooService.getFoo(); <- NPE happens here
}
}
Run Code Online (Sandbox Code Playgroud)
Foo服务
@Service("fooService")
public class FooServiceImpl implements FooService {
@Autowired
FooRepository fooDao;
@Override
public Foo getFoo() {
return fooDao.getFoo();
}
}
Run Code Online (Sandbox Code Playgroud)
安全配置
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class SecurityConfig extends WebSecurityConfigurerAdapter { ... }
Run Code Online (Sandbox Code Playgroud)
似乎调用服务的线程没有正确的安全角色。
尝试移动@PreAuthorize注释以仅保护view方法。
另外根据您的评论,我发现您的问题可能是您正在使用该 bean 的两个不同实例。检查您是否没有在上下文文件中重复定义。
| 归档时间: |
|
| 查看次数: |
527 次 |
| 最近记录: |