我使用的是Java 6,这是第一次使用jax-rs,我有这个资源类,但是我不知道为什么在访问服务时没有检索到我的会话。登录工作良好,可以在应用程序的其他部分检索主体。
@Path("/countries")
@Stateless
public class CountryResource {
@Resource
SessionContext ctx;
@EJB
private CityBean cityBean;
@Path("/countryid/{countryid}")
@GET
@Produces("application/xml")
public String getCountryByPk(@PathParam("countryid") Long tlCountryId){
if(ctx != null){
System.out.println(ctx.getCallerPrincipal());
}
String country;
...
return country;
}这个输出是匿名的,尽管我已经成功登录了。在尝试使用SessionContext之前,我试图使@RolesAllowed工作,但也没有取得进展。我还有JaxRsActivator类。我有什么需要知道的关于jax的会议吗?
@ApplicationPath("/rest")
public class JaxRsActivator extends Application {
}发布于 2015-05-03 15:51:40
正如我所看到的,您的应用程序是无状态的,因此会话不会被固有地使用。您必须在请求响应对象中显式添加cookie或会话标识符,以维护应用程序的状态。
@Stateless
public class CountryResource {检查这和这
维护状态手动
正如您所看到的,使用传统的客户机-服务器应用程序状态是自动维护的。它不需要程序员的任何手动干预。对于无状态web应用程序,情况并非如此,但是有哪些手动步骤可用于维护请求之间的状态?
使用URL.URL中的参数--这可能会导致较大且无法管理的URL,并且对URL的最大大小有限制。这还意味着用户可以编辑URL并有效地更改状态,结果无法预测。
使用表单中的隐藏字段。,这会导致较大的表单,因此传输速度较慢。即使数据可能隐藏在呈现的文档中,用户仍然可以使用浏览器的“查看源”选项来查看数据。用户甚至可以在将某些值传输回服务器之前编辑源并更改其中的一些值。
使用cookie。对可以存储在cookie中的数据量有限制,对任何一次活动的cookie的数量都有限制,较大的cookie传输时间更长。更糟糕的是,客户端可以完全禁用cookie。
使用服务器上的文件。在PHP中是通过一个名为sessions的工具提供的,它允许将数据记录在磁盘文件或数据库表中。这里的优点是所有数据都是在服务器上维护的,所以不会向客户端传输任何数据(除了会话名和id)。因此,客户端无法查看或编辑此会话数据。
发布于 2016-01-29 13:28:20
首先,确保将CountryResource类部署为EJB。一些应用服务器(例如,JBoss EAP6.x+ RestEasy 2.x)存在着无法立即恢复资源的缺点。(如何启用它,例如对于JBoss EAP6.x+ RestEasy 2.x,您可以查看我的另一个响应:https://stackoverflow.com/a/35085385/466677)
然后检查主体(身份验证信息)是否正确地从web资源传播到EJB (SessionContext),例如对于JBoss EAP6.x+ RestEasy 2.x,可以通过war文件中的以下更改来实现:
jboss-web.xml
<jboss-web>
<security-domain>my-security-domain-name-in-jboss-configuration</security-domain>
</jboss-web>web.xml -包含身份验证声明,在本例中是基本的auth。
<security-constraint>
<web-resource-collection>
<web-resource-name>Resteasy auth</web-resource-name>
<url-pattern>/*</url-pattern>
<http-method>GET</http-method>
<http-method>POST</http-method>
</web-resource-collection>
<auth-constraint>
<role-name>REST_USER</role-name>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>BASIC</auth-method>
<realm-name>My Realm</realm-name>
</login-config>
<security-role>
<role-name>REST_USER</role-name>
</security-role>https://stackoverflow.com/questions/30015032
复制相似问题