使用Struts 1实现Struts 2拦截器

时间:2010-01-05 20:37:59

标签: login struts2 struts interceptor

我有一个用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. 有没有更好的方法(比拦截器更优雅)这样做?
  3. 提前谢谢。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

我认为好的方法是在web.xml中创建过滤器类make项 现在,你的过滤器做了如下编码

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