2011-07-20 172 views
1

我正在使用JBoss爲基於Flex的RIA提供一堆RESTful服務。無論如何,我通過一些痛苦來實現登錄(使用基於表單的登錄),但我很努力地提供一種RESTful方法來登錄用戶。 在JSP中我可以簡單地調用類似:通過RESTful調用(無效會話)註銷用戶

session.invalidate() 

我怎樣才能做到這一點與JBoss,RestEasy的使用無狀態會話bean實現RESTful服務?

+0

你是否在會話中保存數據? –

+0

我沒有在會話中保留任何數據。我只需要它進行身份驗證。 – Christoph

+0

你在使用什麼安全服務?你在使用Spring Security嗎?你有沒有推出自己的登錄服務?換句話說,您的應用程序是直接訪問會話還是通過其他服務間接訪問它? – Pace

回答

4

後有點googeling的我創建了一個解決方案:

這是我的RESTful服務bean的本地接口:

@Local 
@Path("/Rest") 
public interface SessionController { 
... 
    @GET 
    @Path("/logout/") 
    @Produces("text/xml") 
    String logout(@Context HttpServletRequest req); 
} 

而這正是實現:

@RolesAllowed({ "TheBoss", "SomeUser", ... }) 
@SecurityDomain("mysqlLogin") 
@Stateless 
public class SessionControllerBean implements SessionController { 

    ... 

    public String logout(@Context HttpServletRequest req) { 
     ... 
     req.getSession().invalidate(); 
     return "SUCCESS"; 
    } 
} 

漂亮就像你看到的那樣簡單。正如我可能已經想象已經依賴注入是一個竅門。通過@Context註釋,我可以要求JBoss注入HTTPServletRequest,我可以從中獲取會話並調用invalidate。

該bean通過resteasy被稱爲RESTful服務。

在使用Java EE進行開發時,我發現我花費更多時間來跟蹤如何在所有這些xml文件(maven配置是純粹的地獄)中配置東西,要使用哪個API以及注入的方式和實際開發功能。

+0

此方法不適用於單點登錄模式。我與Jboss有問題 – vanduc1102