如何在 ContainerRequest 中获取会话对象以使用注解 @RolesAllowed(Role_user)?

Posted

技术标签:

【中文标题】如何在 ContainerRequest 中获取会话对象以使用注解 @RolesAllowed(Role_user)?【英文标题】:How to get a session Object in the ContainerRequest to can use the annotation @RolesAllowed(Role_user)? 【发布时间】:2013-08-12 00:06:51 【问题描述】:

我正在使用带有 Jersey 的 App Engine 构建应用程序。我想使用允许在请求中创建过滤器的注释@RolesAllowed(Role_user)

问题是我们需要配置类SecurityContextFilter

我的目标是将用户的id 存储在会话中,然后直接在我的班级SecurityContextFilterfunction : public ContainerRequest filter(ContainerRequest request) 中检查他们的角色。

我需要注入 HttpRequest 来获取会话,但是当我注入它时,我得到一个异常 Java.lang.Null

我想在 ContainerRequest 类中获取会话对象。

我该怎么做?

编辑:

我已经找到了解决这个问题的方法,但我不知道这是否干净:您可以直接在函数中注入 HttpRequest:isUserInRole(_role) 所以我使用它,然后通过会话获取我的 userId,然后获取角色用户,然后检查该角色是否匹配 _role 并返回 true 或 false。

【问题讨论】:

我想我有同样的问题..你尝试用@Context private HttpServletRequest httpRequest注入HttpRequest; .. 正确的?我以这种方式尝试过,过滤器内的httpRequest为null 是的!这正是我试图做的!但我仍然没有回应。如果您对此问题有解决方案,请告诉我。 不..我还没有找到任何东西.. 【参考方案1】:

我很不确定您是否可以在球衣的ContainerRequestFilter 之上注入HttpServletRequest,但您仍然可以通过编程方式而不是使用注释:

@Override
public ContainerRequest filter(ContainerRequest request) 
    if(request.isUserInRole("SOME_ROLE"))
    //process some treatement
    
    return request;

BR。

【讨论】:

以上是关于如何在 ContainerRequest 中获取会话对象以使用注解 @RolesAllowed(Role_user)?的主要内容,如果未能解决你的问题,请参考以下文章

从容器请求中提取路径参数

在鼠标单击方法中,当我调用方法获取 X() 并获取 Y() 时,无论位置如何,它都会返回 -8 [关闭]

将自定义数据从 Jersey Filter 服务传递到 Jersey End-Point 服务

如何从刷新令牌中获取访问令牌?刷新令牌会过期吗?

如何在js代码中,如何获取event

MSSQLSERVER中如何快速获取表的记录总数