3

login.jsp ページの非表示フィールドに 'cat=1' を設定していますが、default-target-url で使用できることを期待していました。spring-security.xml のエントリは、

<form-login login-page="/login.html" default-target-url="/index.html"
            authentication-failure-url="/loginfailed.html" />

そしてコントローラーで、

@RequestMapping(value="/index", method = RequestMethod.GET)
    public String index(HttpServletRequest request) {
        String cat = request.getParameter("cat");
        if (cat != null && cat.equalsIgnoreCase("1")) {
            return "add";
        }  
        return "redirect:/index.jsp";
    }

しかし、リクエストパラメータ値を取得できません(catはnullです)ので、「default-target-url」がリクエストをリダイレクトする(転送しない?)ためだと思います。そうですか?

はいの場合、「default-target-url」にパラメーターを渡す方法はありますか?

4

3 に答える 3

3

実装方法を少し変更しました。詳細は以下のとおりです。

spring-security.xml

<form-login login-page="/login.html" authentication-success-handler-ref="feedSuccessHandler"
            authentication-failure-url="/loginfailed.html" />
        <logout logout-success-url="/loggedout.html"/>

<beans:bean id="feedSuccessHandler"
     class="main.java.com.sp.utilities.FeedSuccessHandler">
    </beans:bean>

FeedSuccessHandler.java

public class FeedSuccessHandler implements AuthenticationSuccessHandler {

    public void onAuthenticationSuccess(HttpServletRequest request,
            HttpServletResponse response, Authentication authentication)
            throws IOException, ServletException {

        String cat = request.getParameter("cat");
        if (cat != null && cat.equalsIgnoreCase("1")) {
            response.sendRedirect(request.getContextPath()+"/add.html");
        }else{
            SavedRequest savedRequest = new HttpSessionRequestCache().getRequest(request, response);
            if(savedRequest != null) {
                response.sendRedirect(savedRequest.getRedirectUrl());
            }else{
                response.sendRedirect(request.getContextPath()+"/");
            }
        }
    }
}

ロールに基づいてリダイレクトをカスタマイズしたい場合、アプリケーションは将来的にも希望どおりに機能します。同じクラスを使用できます。

于 2013-02-19T17:05:41.727 に答える
1

デフォルトではリダイレクトされますが、この動作を変更するために使用できる構成オプションがいくつかあります。どちらも、 AbstractAuthenticationTargetUrlRequestHandler既存の 2 つの認証成功ハンドラー実装の親クラスである で定義されています (デフォルトSavedRequestAwareAuthenticationSuccessHandlerでは、名前空間構成によって使用されます)。

  1. そのtargetUrlParameterプロパティを設定して、HTTP 要求にその名前のパラメーターがあるかどうかを確認します。その場合、そのリクエスト パラメータで指定された URL にリダイレクトされます。

  2. またはカスタムを設定しますredirectStrategy。デフォルトの実装では が呼び出さresponse.sendRedirect()れますが、カスタム実装で必要に応じて変更できます。

ただし、これらの構成ポイントはどちらも名前空間構成を通じて公開されていないため、多少の問題が発生する可能性があります。そのため、より深いレベルに移動して、Bean 定義を手動で記述する必要があります。

于 2013-02-19T15:02:49.453 に答える
0

redirectStrategyリダイレクトは、 のプロパティで定義されたリダイレクト戦略によって制御されますSimpleUrlAuthenticationSuccessHandler

のデフォルトredirectStrategyは のインスタンスですDefaultRedirectStrategy

あなたがする必要があるのは、あなた自身を実装することです redirectStrategy(implements RedirectStrategy)。そして、次のように構成します。

...
<bean id="usernamePasswordAuthenticationFilter">
    ...
    <property name="authenticationSuccessHandler">
        <bean
           class="org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler">
            <property name="redirectStrategy">
               <bean class="yourRedirectStrategy"/>
            <property>
         </bean>
    </property>
</bean>
于 2013-02-19T15:00:25.993 に答える