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

时间:2011-07-20 17:28:54

标签: java ejb restful-authentication logout

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

session.invalidate()

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

1 个答案:

答案 0 :(得分: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。

通过resteasy作为RESTful服务调用bean。

在使用Java EE进行开发时,我发现我花了更多的时间来跟踪如何在所有这些xml文件中配置内容(maven配置是纯粹的地狱),使用哪种API以及注入的方式和方式比实际开发功能要多。