当前位置: 首页 > 面试题库 >

Java FilterImplementation用于会话检查

姚雅珺
2023-03-14
问题内容

我使用JSF,Hibernate,Spring创建一个Web应用程序。我添加了一个用于检查会话的过滤器。我的过滤器代码是:

public class AdminFilter implements Filter{

     private ArrayList<String> urlList;

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
       String urls = filterConfig.getInitParameter("avoid-urls");
       StringTokenizer token = new StringTokenizer(urls, ",");   
       urlList = new ArrayList<String>();

        while (token.hasMoreTokens()) {
            urlList.add(token.nextToken());  
        }
    }

    // Checking if user is logged in
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
                HttpServletRequest req= (HttpServletRequest) request;
        HttpServletResponse resp= (HttpServletResponse) response;
        String url = req.getServletPath();
        HttpSession session =   req.getSession();
                if(!urlList.contains(url) && session.getAttribute("user")==null) 
                {
                    resp.sendRedirect(req.getContextPath() + "/backend/login/index.xhtml");

                }
          chain.doFilter(req, resp);
    }

    @Override
    public void destroy() {
       // throw new UnsupportedOperationException("Not supported yet.");
    }

}

在过滤器的init方法中,我有一些避免使用URL的方法,应该跳过会话检查,例如登录页面本身。这工作正常,但是此过滤器限制了我的CSS,图像和JS无法在登录页面上加载。建议我过滤器出了什么问题?


问题答案:

您的登录页面需要一些资源(CSS,JS,图像),这些资源是浏览器在单独的请求中请求的,这些资源会被Filter拦截,并且由于您没有任何参数可以跳过对资源的此类请求(在登录页面上使用),将阻止此请求

建议:

您可以使用Spring-Security,而不是花时间在编写代码上,而是通过配置获得了很大的灵活性



 类似资料:
  • 我读过关于命名空间属性的文章。我尝试使用此功能: 它工作得很好。 作为一项改进,我希望覆盖会话服务,因此它将在任何地方使用,并使用依赖注入,而不是将会话服务耦合到addProduct函数中。 为此,我编辑了我的services.yaml 然后我更新CartController: 现在我得到了以下错误消息: 检测到服务“会话”的循环引用,路径:“会话”- 这个错误应该在这个问题上得到解决:#3626

  • SSO/SAML使用OKTA API与SP一起工作。我的问题是,有没有一种方法可以从我的应用程序中获取当前的OKTA会话Id?

  • 问题内容: 为了进行记录,我想创建一个记录器,该记录器将当前会话的ID自动添加到记录的行中。 对于已登录的用户,这不是问题: 问题是,在用户登录之前的回报。是否有另一种获取会话ID的方法,而无需引用当前响应或此类响应? 问题答案: 您可以使用 这依赖于Spring的,因此应与Spring MVC一起使用,否则您应该有一个声明。如果不存在,还将创建会话。

  • 问题内容: 我正在尝试在我的Express应用程序中使用redis进行会话。 我执行以下操作: 稍后,在我的应用程序中,如果执行以下操作: 我得到: 无法读取未定义的属性“ someProperty” 这表明req.session是未定义的 (我可以从config部分的console.log条目中看到) 我肯定有redis运行,并且可以看到我的应用最初连接到它(使用redis-cli监视器) 问题

  • 问题内容: 如何检查会话是否无效?API中没有方法。 一样吗?如果没有,有什么区别? 问题答案: 如果您想根据请求知道它是否有效: 如果您存储了对该会话的引用并需要验证,我会

  • 中描述的声明性基和ORM映射函数 映射器配置 是ORM的主要配置接口。配置映射后,持久性操作的主要使用接口是 Session . 会话基础 会议的作用是什么? 使用会话的基础知识 打开和关闭会话 构建begin/commit/rollback块 使用sessionmaker 查询(1.x样式) 查询(2.0样式) 添加新项目或现有项目 删除 冲洗 过期/刷新 使用任意WHERE子句更新和删除 自动