2012-07-05 36 views
2

我有一个拥有jsps的webapp。我没有使用任何struts或mvc框架。我们使用Apache CXF构建JAX-RS服务。在jax-rs webservice中处理身份验证和授权,使用cxf

现在我想要做下列

  1. 允许用户与用户名和密码登录。
  2. 对于所有后续的webservice调用,都应该使用相同的认证信息。
  3. 登录用户有一些细节(个人资料照片,全名),我想保持它在会话中保持不变。
  4. 另外,它的作用被定义。根据角色,只有某些jax-rs调用将被允许。
  5. JSP中还使用角色来限制对功能的访问。
  6. Web服务可以在外部访问,因此应该使用认证和授权信息。

据我了解,我们不应该在jax-rs服务中使用会话。处理上述情况的最佳方法是什么?

回答

2

最好的方法取决于你如何估计它。 我这样做的方式是

  1. 运行REST服务和JSP在同一实例
  2. 使用web.xml和CXF设置安全策略,它允许用户/密码认证和授权,角色绑定到jax-rs网址和JSP网址。
  3. 根据2,可以直接在外部调用jax-rs服务,但是user/pw是您指定的必需的。

希望这可以帮助你一点。

+0

问题是如何在个别操作中获取安全上下文而不会搞乱代码。目前我所做的是获取servletContext并从相同的等得到会话。它的脏。我的简单POJO杂乱无章的访问控制代码读取会话等 – 2013-02-19 07:39:22

0

将cxf安全验证视为任何其他http或https验证。您必须拦截请求并将其传递给其余服务。您可以使用siteminder之类的任何工具,否则可以编写CXF拦截器来执行您自己的安全验证。在拦截器中,你可以调用SSO类型的令牌生成器服务器,以防你拥有基础架构,或者如果你的架构是以这种方式构建的,则可以调用数据库。您可以使用缓存来减少资源命中,并可以查看自定义或休眠缓存。启用Https必须在服务器配置中完成。如果你有证书,你可以使用相同的方法,你可以使用openssl自己生成证书。