我想了解spring安全性。我正在使用java-config而不是xml。我试图创建一个控制器,然后测试@PreAuthorize
表示法。但在我的给定代码中,@PreAuthorize
仅在与getActiveSessions
函数一起使用时才有效,但在与getName
函数一起使用时它不起作用。所以这段代码按预期工作@PreAuthorize不起作用从另一个函数调用的函数
public class DemoSessionController extends SessionController{
@RequestMapping("/welcome/{a}")
@PreAuthorize("hasRole('ROLE_ADMIN')")
public String getActiveSessions(@PathVariable String a) {
// TODO Auto-generated method stub
String str = getName(a);
return str;
}
public String getName(String name) {
// TODO Auto-generated method stub
return "This is "+name+"";
}
}
但这并不
public class DemoSessionController extends SessionController{
@RequestMapping("/welcome/{a}")
public String getActiveSessions(@PathVariable String a) {
// TODO Auto-generated method stub
String str = getName(a);
return str;
}
@PreAuthorize("hasRole('ROLE_ADMIN')")
public String getName(String name) {
// TODO Auto-generated method stub
return "This is "+name+"";
}
}
有人能解释为什么第二种情况下不工作,我怎样才能使它发挥作用?谢谢 !!
Spring使用代理申请AOP。当只使用代理方法调用INTO时,对象会通过代理,内部方法调用绕过代理。为了使它工作,您需要一个完整的AOP解决方案,比如AspectJ,可以加载或编译时间编码。 –
@ M.Deinum感谢您的及时和明确的答复。我明白为什么现在不行。关于使它工作,你说'全面爆炸'的方式,这是否意味着解决方案会很麻烦?你能否给任何可能有帮助的资源提供链接?谢谢 !! – varunkr
我知道它与Java配置一起工作,但我现在无法访问我的代码。基本上,有两个上下文(DispatcherServlet vs其他)。如果安全配置适用于正确的(或两者)上下文,注释才会起作用。搜索网络,你会找到解决方案。一旦配置正确,它将工作。 – Codo