2010-01-05 4 views
2

У меня есть устаревшее приложение, написанное на Struts 1. Единственная функция, которую я попросил добавить, - это защитить некоторые действия. В настоящее время любой пользователь может делать все, что захочет. Идея состоит в том, чтобы разрешить всем пользователям видеть данные, но выполнять операцию модификации блока, то есть модифицировать данные, которые пользователь должен войти в систему.Реализация Struts 2 Перехватчики с использованием Struts 1

Я знаю, что у Struts2 есть перехватчики, поэтому я мог прикрепить их к требуемым действиям и переслать пользователям для входа в систему при необходимости. Но как я могу сделать подобное в приложении Struts 1?

Моя первая идея состояла в том, чтобы создать свой собственный абстрактный класс действий:

public class AuthenticatedAction { 
    public ActionForward execute(
     ActionMapping mapping, 
     ActionForm form, 
     HttpServletRequest theRequest, 
     HttpServletResponse theResponse) { 
      if (!logged) { 
       // forward to log in form 
      } else { 
       doExecute(mapping, form, request, response); 
      } 
     } 

public abstract ActionForward doExecute(
    ActionMapping mapping, 
    ActionForm form, 
    HttpServletRequest theRequest, 
    HttpServletResponse theResponse); 
} 

Затем измените все действия, которые требуют проверки подлинности от

extends Action 

в

extends AuthenticatedAction 

затем добавить форму входа , действие входа (которое выполняет аутентификации и помещает этот статус в сеанс) и меняет JS P для отображения блока аутентификации, например «Вы (не вошли в систему) /», «Вход/Выход». Как я думаю, это должно решить проблему.

  1. Если это не решит проблему, объясните причину.
  2. Есть ли лучшие (более элегантные, такие как перехватчики) способ сделать это?

Благодарим вас заранее.

ответ

2

Я думаю, вы можете использовать фильтры для достижения ваших требований. Вы можете объявить фильтр в вашем web.xml и предоставить шаблон url, на котором он применяется.

< filter> 
< filter-name>filterName< /filter-name> 
< filter-class>filter.class</filter-class> 

< filter-mapping> 
< filter-name>filterName< /filter-name> 
< url-pattern>*.*< /url-pattern> 
< /filter-mapping> 

Соответствующая ссылка here

+0

Boy Мне так жаль, что мне не нужен этот ответ, но жить так, как я. Спасибо за предоставление! :) – Art

0

Я думаю, что хороший способ создать класс фильтра сделать запись в web.xml теперь вам ваш fliter сделать кодирования, как показано ниже

public void doFilter(ServletRequest request, ServletResponse response, 

    FilterChain chain) throws IOException, ServletException { 
    System.out.println("coming from globester filtersss 2"); 
    HttpServletRequest requesth = (HttpServletRequest) request; 
     HttpServletResponse responseh = (HttpServletResponse) response; 
     HttpSession session = requesth.getSession(); 

     String ss=requesth.getParameter("cat"); 

     if(ss!=null && ss.equalsIgnoreCase("trues")){ 

     }else{ 
     responseh.sendRedirect("searchSanta.jsp?cat=trues"); 
     } 
} 
Смежные вопросы