0

私は j_security_check で Websphere を使用しており、CONFIDENTIAL および SSL 設定でログイン フィルターが機能しています。複雑な要件があるため、j_security_check を実行する前に j_username 変数を処理する必要があります。

ここで見つかった回答の 1 つから、このログイン前処理は実行できないとのことでした。ただし、前の質問者は Tomcat を使用していましたが、私は Websphere を使用していました。ここに私の問題の解決策があることがわかりましたが、ログインしようとするたびに、「ウェブサイトはページを表示できません。ウェブサイトにはプログラミング エラーがあります。」というメッセージが表示されるようです。

構文が正しいかどうかを確認して、トラブルシューティングを試みました。のようないくつかの矛盾を見つけて、できる限り修正しました。ただし、引き続き同じエラーが発生します。

誰かが私を正しい方向に投げることができますか? 詳細情報を提供できますが、それらはほとんど 2 番目のリンクに似ています。唯一の保護されたフォルダーは \protected\ にあり、.java サーブレットは \WEB-INF\classes にあります。

ありがとうございました。

4

1 に答える 1

1

興味のある方のために、結果は次のとおりです。

\WEB-INF\web.xmlの場合

<filter id="Filter_1">
    <filter-name>LoginFilter</filter-name>
    <filter-class>com.myloginfilter.MyLoginFilter</filter-class>
    <description>Performs pre-login operation</description>
</filter>
<filter-mapping>
    <filter-name>LoginFilter</filter-name>
    <url-pattern>/j_security_check</url-pattern>
</filter-mapping>

\WEB-INF\classes\com\myloginfilter\MyLoginFilter.class の場合

    public class MyLoginFilter implements Filter {

    protected FilterConfig filterConfig;

    public void init(FilterConfig filterConfig) throws ServletException {
       this.filterConfig = filterConfig;
    }

    public void destroy() {
       this.filterConfig = null;
    }

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws java.io.IOException, ServletException {
        chain.doFilter(new MyRequestWrapper((HttpServletRequest) request), response);
    }

    public static class MyRequestWrapper extends HttpServletRequestWrapper {

        public MyRequestWrapper(HttpServletRequest request) {
            super(request);
        }

        @Override
        public String getParameter(String name) {
            String username= getRequest().getParameter("j_username");

            if ("j_password".equals(name) && "admin".equals(username)) {
                username = "administrator";
                return username;
            }
            return super.getParameter(name);
        }
    }
}

コンパイルするには、次のコマンドで Javac を使用します。

javac -cp servlet-api-2.3.jar MyLoginFilter.class
于 2012-04-26T03:56:45.230 に答える