gpt4 book ai didi

java - 加载 Jax-rs 资源时 SessionContext 丢失

转载 作者:太空宇宙 更新时间:2023-11-04 13:54:07 25 4
gpt4 key购买 nike

我正在使用 Java EE 6,这是第一次使用 jax-rs 并且我有这个资源类,但我不知道为什么在访问服务时没有检索到我的 session 。登录工作正常,并且可以在应用程序的其他部分检索主体。

@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 类。关于与 session 相关的 jax-rs 我需要了解什么吗?

@ApplicationPath("/rest")
public class JaxRsActivator extends Application {
}

最佳答案

据我所知,您的应用程序是无状态的应用程序,因此本质上不会使用 session 。您必须在请求响应对象中显式添加 cookie 或 session 标识符来维护应用程序的状态。

@Stateless
public class CountryResource {

检查this & this

手动维护状态

如您所见,传统的客户端-服务器应用程序状态是自动维护的。它不需要程序员的任何手动干预。无状态 Web 应用程序的情况并非如此,但是可以使用哪些手动步骤来维护请求之间的状态?

在 URL 中使用参数。这可能会导致 URL 过大且难以管理,并且 URL 的最大大小是有限制的。这还意味着用户可以编辑 URL 并有效地更改状态,从而产生不可预测的结果。

在表单中使用隐藏字段。这可能会导致表单过大,从而导致传输速度变慢。即使数据可能隐藏在呈现的文档中,用户仍然可以通过使用浏览器的“查看源”选项来查看它。用户甚至可以在将数据传输回服务器之前编辑源并更改某些值。

使用 cookie。 cookie 中可以存储的数据量是有限的,同时可以激活的 cookie 数量也有限制,较大的 cookie 传输时间会更长。更糟糕的是,客户端可以选择完全禁用 cookie

使用服务器上的文件。在 PHP 中,这种能力是通过称为 session 的工具提供的,该工具允许将数据记录在磁盘文件或数据库表中。这样做的优点是所有数据都保存在服务器上,因此不会将任何数据传输到客户端( session 名称和 ID 除外)。因此,客户端无法查看或编辑此 session 数据。

关于java - 加载 Jax-rs 资源时 SessionContext 丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30015032/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com