通过 RESTful 调用注销用户(使会话无效)

Posted

技术标签:

【中文标题】通过 RESTful 调用注销用户(使会话无效)【英文标题】:logout user via RESTful call (invalidate session) 【发布时间】:2011-10-09 14:31:42 【问题描述】:

我正在使用 JBoss 为基于 Flex 的 RIA 提供一堆 RESTful 服务。无论如何,我通过一些痛苦来实现登录(使用基于表单的登录),但我正在努力提供一种 RESTful 方法来注销用户。 在 JSP 中,我可以简单地调用如下内容:

session.invalidate()

我如何使用 JBoss,Resteasy 使用无状态会话 bean 来实现 RESTful 服务?

【问题讨论】:

您是否在会话中保存数据? 我没有在会话中保留任何数据。我只需要它进行身份验证。 您使用什么安全服务?你在使用 Spring Security 吗?您是否推出了自己的登录服务?换句话说,您的应用程序是直接访问会话还是通过其他服务间接访问它? 【参考方案1】:

经过一番谷歌搜索后,我创建了一个解决方案:

这是我的 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 正在作为 RESTful 服务通过 resteasy 调用。

在使用 Java EE 进行开发时,我发现与实际开发功能相比,我花更多的时间来跟踪如何在所有这些 xml 文件中配置内容(maven 配置简直就是地狱)、使用哪些 API 以及如何注入哪个 bean。

【讨论】:

此方法不适用于单点登录模式。我对 Jboss 有意见

以上是关于通过 RESTful 调用注销用户(使会话无效)的主要内容,如果未能解决你的问题,请参考以下文章

注销时如何使用户会话无效?

如何记录 tomcat 会话失效或用户注销

用户注销时会话无效(Spring)

注销后 Cookie 会话不会失效

您如何在 spring-security 中注销所有已登录的用户?

使 Spring 安全会话无效