当前位置: 首页 > 编程笔记 >

java 在Jetty9中使用HttpSessionListener和Filter

赫连昕
2023-03-14
本文向大家介绍java 在Jetty9中使用HttpSessionListener和Filter,包括了java 在Jetty9中使用HttpSessionListener和Filter的使用技巧和注意事项,需要的朋友参考一下

java 在Jetty9中使用HttpSessionListener和Filter

HttpSessionListener

当Session创建或销毁的时候被调用

示例代码:

class MyHttpSessionListener implements HttpSessionListener { 
  @Override 
  public void sessionCreated(HttpSessionEvent httpSessionEvent) { 
    System.out.println("sessionCreated"); 
  } 
 
  @Override 
  public void sessionDestroyed(HttpSessionEvent httpSessionEvent) { 
    System.out.println("sessionDestroyed"); 
  } 
} 

注册方法:

ServletContextHandler.getSessionHandler().addEventListener(new MyHttpSessionListener()); 

注意:  若整个请求中都没有用到Session, 则不会生成它, 也不会调用Listener

Filter

当客户端请求数据时被调用

示例代码:

class MyFilter implements Filter { 
 
  public MyFilter() { 
 
  } 
 
  @Override 
  public void init(FilterConfig filterConfig) throws ServletException { 
 
  } 
 
  @Override 
  public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { 
    if (servletRequest instanceof HttpServletRequest) { 
      HttpServletRequest httpRequest = (HttpServletRequest) servletRequest; 
 
      System.out.println(httpRequest.getServletPath()); 
    } 
    filterChain.doFilter(servletRequest, servletResponse); 
  } 
 
  @Override 
  public void destroy() { 
 
  } 
} 

注册方法:

ServletContextHandler.addFilter(new FilterHolder(new MyFilter()), "/*", EnumSet.allOf(DispatcherType.class)); 

注意: 若请求的路径错误, 则不会触发Filter

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

 类似资料:
  • 我已经实现了HttpSessionListiner,但它不起作用。用debuger检查了它-进入servlet后创建新的session,JSESSION_ID在登录后更改,但是session.getcreatetime()保持不变(session保持不变?)。使用注释,Spring安全。也许我错过了spring Security中的一些配置?

  • 我有一个有状态的会话作用域(CDI)EJB,它保存有关用户会话的信息。 现在,我想从一个 我从webapp直接访问EJB(使用注入)到我为JSF使用的bean中(它们也是CDI管理的bean)。 我面临的问题是,似乎与JSF bean处于不同的“会话范围”。创建了两个实例;一个从JSF实例化,另一个从HttpSessionListener实例化。 我尝试通过注入实例注入bean 这个bug报告建议

  • 问题内容: 如何从SessionListener访问请求标头? 创建当前会话时,我需要在当前会话上设置超时。超时需要根据HttpServletRequest中的标头而有所不同。我已经有一个SessionListener(实现HttpSessionListener),它记录新会话的创建和销毁,这似乎是设置超时的最合逻辑的地方。 我尝试了以下操作,但始终将ctx设置为null。 问题答案: 将因为它被

  • 问题内容: 如何在不使用调用的情况下使用Spring将依赖项注入? 问题答案: 由于Servlet 3.0 ServletContext具有“ addListener”方法,因此可以通过如下代码添加而不是在web.xml文件中添加侦听器: 这意味着你可以正常地注入“ MyHttpSessionListener”中,并且,只要你的应用程序上下文中存在bean,就会使侦听器注册到容器中

  • 问题内容: 在Java for Eclipse中开发时,是否可以使用m4宏,即。确保在Eclipse编译之前自动调用预处理器? 还是有人在Eclipse中成功使用了另一个预处理器? 问题答案: 您可以在Eclipse项目上指定一个任意的构建器,并对其进行排序,以便在运行Java构建器之前执行该构建器。 要定义新的构建器,请打开项目属性(右键单击- > Properties或- ),选择“ 构建器”

  • 我以标准方式在Java中使用断言,在IDE中启用它们。因此,它们不是产品发布的一部分。最近,我看到了<code>抛出新的断言错误()的代码示例 我的猜测是,主要区别在于断言的可选性,因此它们不会减慢生产性能,因此它们可以在代码中经常发生,但修复用户报告的几乎无法重现的错误更难。 对于,正好相反。 我还发现在代码中不应该执行的地方更实用,而不是使用。特别是如果需要返回值。例如: 我的推理正确吗 两种