当前位置: 首页 > 知识库问答 >
问题:

我如何从过滤器中读取JSF会话bean?

晏树
2023-03-14

我正在搜索,但我找不到答案,我需要基于权限的安全资源,我不能使用过滤器,因为FacesContext之前没有初始化,我需要在会话bean中加载权限。避免使用过滤器的解决方案?PhaseListener、ViewHandler和ResourceHandler无法捕获URL资源请求,例如,我需要拒绝此直接访问:http://127.0.0.1:8080/test/resources/images/image.jpg

Thx提前...

共有1个答案

水恩
2023-03-14

JSF将会话范围的托管bean存储为HttpSession的属性,而HttpServletRequest#getSession()可以在筛选器中使用该属性。

HttpSession session = ((HttpServletRequest) request).getSession();
SessionBean sessionBean = session.getAttribute("sessionBean");
// ...

更新:根据注释,您似乎实际上在使用CDI:

我的过滤器是在JSF之前触发的,当我使用GetAttribute时,我总是得到一个空值。我在Bean上使用带有'named'和'sessionscoped'注释的CDI,因为我需要使用拦截器来实现安全性

@Inject
private SessionBean sessionBean;
 类似资料:
  • 在Jersey 1.x中,我们从一个(Jersey)会话属性访问Wicket会话,如这里https://stackoverflow.com/a/15767824/1399659.所述 在迁移到Jersey 2.x时,使用ContainerRequestFilter似乎是合适的模式,它还允许Springbean注入。我们通过包括 作为 Servlet 容器的初始化参数,并在容器请求筛选实现上使用@P

  • 有没有办法使用Google工作表API只读取列X中带有空单元格的行? 这是我今天从谷歌表单上看到的方式,但我没有看到任何“过滤”方法。

  • 问题内容: 我有一个会话验证过滤器,当会话过期时该过滤器注销用户。 这是一段代码,但是没有用。不起作用意味着即使会话过期,它也不会重定向到登录页面。 请帮助我解决此问题。 问题答案: 我有一个会话验证过滤器,当会话过期时该过滤器注销用户。 老实说,这完全没有道理。如果将已登录用户存储为会话的属性,并基于会话中已登录用户的存在来拦截“已登录”状态,则在任何时候都不需要手动注销该用户。会话已过期。当会

  • 问题内容: 我正在尝试从golang中的SSH会话读取数据。我编写了以下函数来尝试实现此目的。 我遇到了一个问题,尝试从stdout读取内容,它为空,导致程序锁定。为了解决这个问题,我编写了BufferSocketData,它检查ReadDataFromSocket应该附加到的通道,如果它有数据,则将其添加到缓冲区。如果1秒钟后仍未收到任何数据,它将停止读取。 但是,这不能正常工作,我不确定为什么

  • 问题内容: 我定义了一个,并且具有带有Spring注释的Java类。 我想将Bean 放入我的,因此尝试了以下操作: 但是它总是返回。我怎样才能得到一个Spring bean? 问题答案: 尝试: 你的bean在应用程序上下文中的名称/标识在哪里。甚至更好: 还可以看看GenericFilterBean及其子类。

  • 问题内容: 这是我的模样 我试图在线查找有关如何从请求中获取价值的信息。 我什么也没找到,所以我尝试枚举,并且一无所知,但是没有任何标题。 问题 如何获得来自请求的所有标头? 问题答案: 类型转换成(仅当是一个 )。 然后可以使用和方法。 像这样: