我想了解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