фильтры сеанса Java - PullRequest
       17

фильтры сеанса Java

2 голосов
/ 27 марта 2012

В моем веб-приложении есть 3 основных раздела: 1. клиент 2. поставщик 3. администратор

Я использую фильтр сеанса java для проверки сеанса пользователя и предоставления доступа к определенной части веб-сайта.следовательно, клиент имеет доступ только к разделу клиента, поставщик имеет доступ к разделу поставщика, а администратор имеет доступ к разделу администратора.

Фильтр сеансов для клиента уже реализован и работает нормально.он проверяет подлинность клиента и дает доступ к подпапке клиента, в результате чего у меня есть несколько 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>

Ответы [ 2 ]

3 голосов
/ 27 марта 2012

Почему бы вам не использовать Servlet Authentication. Вам просто нужно определить роли и сопоставить их с помощью тега <security-constraint>.

Вот пример, который показывает, как определить:

Ограничение безопасности для клиентов

<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>
0 голосов
/ 27 марта 2012

Я уверен, что вы можете найти способ реализовать все в одном и том же фильтре, но если вы хотите следовать «принципу единой ответственности», лучше иметь один класс на роль. Возможно, в будущем вам придется выполнять определенную обработку для каждого пользователя, поэтому будет лучше иметь специализированные фильтры.

Если вам действительно нужен только один фильтр, вы можете следовать этой теме:

Написание фильтра авторизации для моего веб-приложения (JSF 2.0)

...