Реализация перехватчиков Struts 2 с использованием Struts 1 - PullRequest
2 голосов
/ 05 января 2010

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

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

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

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 

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

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

Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 25 января 2010

Я думаю, вы можете использовать фильтры для достижения ваших требований.Вы можете объявить фильтр в своем файле 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>

Соответствующая ссылка здесь

0 голосов
/ 25 декабря 2010

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

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");
        }
}
...