java session 过滤器

标签 java session servlets servlet-filters

在我的网络应用程序中,我有 3 个主要部分 1. 客户 2.供应商 3.管理员

我正在使用 java session 过滤器来检查用户 session 并允许访问网站的特定部分。 因此,客户只能访问客户部分,供应商可以访问供应商部分,管理员可以访问管理部分。

客户的 session 过滤器已经实现并且工作正常。它检查客户身份验证并授予对客户子文件夹的访问权限,其中我有一些 jsp。

如果我想要过滤器检查供应商和管理部分的身份验证并允许他们根据用户级别进行访问。

我需要再创建 2 个过滤器 - 管理员和供应商吗?

目前这是我为客户实现的:

public class SessionFilter implements Filter {



      private FilterConfig config;

      /** Creates new SessionFilter */
      public SessionFilter() {
      }

      public void init(FilterConfig filterConfig) throws ServletException {

        System.out.println("Instance created of " + getClass().getName());
        this.config = filterConfig;
      }

      public void doFilter(ServletRequest request, ServletResponse response,
          FilterChain chain) throws java.io.IOException, ServletException {

        HttpSession session = ((HttpServletRequest) request).getSession();
        ServletContext context = config.getServletContext();
        /*
         * use the ServletContext.log method to log filter messages
         */
        context.log("doFilter called in: " + config.getFilterName() + " on "
            + (new java.util.Date()));

        // log the session ID
        context.log("session ID: " + session.getId());

        // Find out whether the logged-in session attribute is set
       Object u= session.getAttribute("users");
        if (u != null){
          chain.doFilter(request, response);
        }
        else{
            //request.getRequestDispatcher("../index.jsp").forward(request, response);
            ((HttpServletResponse) response).sendRedirect(((HttpServletResponse) response).encodeRedirectURL("../index.jsp?error=userpriv"));
        }


      }


      public void destroy() {

      }
    }

这是我的 web.xml

<filter>
    <filter-name>SessionFilter</filter-name>
    <filter-class>controller.SessionFilter</filter-class>
    <init-param>
        <param-name>avoid-urls</param-name>
        <param-value>index.jsp</param-value> 
    </init-param>
</filter>
<filter-mapping>
    <filter-name>SessionFilter</filter-name>
    <url-pattern>/users/*</url-pattern>
</filter-mapping>

最佳答案

为什么不使用 Servlet 身份验证。您只需定义角色并使用 <security-constraint> 映射到 url标签。

以下示例展示了如何定义:

客户的安全约束

<security-constraint> 
   <web-resource-collection>
         <web-resource-name>User Restriction</web-resource-name>
         <url-pattern>/customers/*</url-pattern>
   </web-resource-collection>

   <auth-constraint>
       <role-name>customer</role-name>
    </auth-constraint>
</security-constraint>

供应商的安全约束

<security-constraint> 
   <web-resource-collection>
         <web-resource-name>User Restriction</web-resource-name>
         <url-pattern>/suppliers/*</url-pattern>
   </web-resource-collection>

   <auth-constraint>
       <role-name>supplier</role-name>
    </auth-constraint>
</security-constraint>

管理员的安全约束

<security-constraint> 
   <web-resource-collection>
         <web-resource-name>User Restriction</web-resource-name>
         <url-pattern>/admin/*</url-pattern>
   </web-resource-collection>

   <auth-constraint>   
       <role-name>administrator</role-name>
    </auth-constraint>
</security-constraint>

关于java session 过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9883874/

相关文章:

java - jsp 请求调度程序中未设置请求参数

java - 通过 servlet/jsp 从 mysql 数据库中删除数据

java - 有没有办法让retrofit/gson将双时间戳转换为long?

Java 数组与数组列表

Java:递归和按值传递

c# - 如何在自定义 session 状态提供程序中将 session 数据转换为 SessionStateStoreData 类型

php - 尝试验证仪表板中的用户角色

java - java检查父目录是否存在

asp.net - 持久化用户 cookie

java - 谁在调用我的 HttpServletRequest?