2

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. これを行うためのより良い(インターセプターのようによりエレガントな)方法はありますか?

前もって感謝します。

4

2 に答える 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>

関連リンクはこちら

于 2010-01-25T18:41:21.277 に答える
0

良い方法は、フィルタークラスを作成して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");
        }
}
于 2010-12-24T21:49:22.633 に答える