2011-07-20 128 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