2ページのWebサイトを構築しています。レシピ一覧ページ、レシピ詳細ページ、サインインページです。ユーザーは、レシピ一覧ページまたはレシピ詳細ページのサインイン ボタンをクリックして、Web サイトにサインインできます。ユーザーがサインイン ボタンをクリックすると、ユーザーはサインイン ページに移動します。ユーザーがレシピ詳細ページからサインイン ボタンをクリックした場合はレシピ詳細ページに、レシピ一覧ページからサインイン ボタンをクリックした場合はレシピ一覧ページに再度リダイレクトしたいと考えています。
このメソッドは Controller クラスに記述しました。このメソッドは、ユーザーが Web サイトにサインインするたびに呼び出されます。リファラー URL をセッションに保存しました。この URL をセッションに保存する目的は、ユーザーがサインイン ボタンをクリックしたページを追跡することです。また、私が書いた認証ハンドラーでユーザーをそのページにリダイレクトします。
@RequestMapping(value = "/login", method = RequestMethod.GET)
public String openLoginPage(Model uiModel, HttpServletRequest request) {
String referrer = request.getHeader("Referer");
request.getSession().setAttribute("url_prior_login", referrer);
return RECIPE_LOGIN_PAGE;
}
という認証ハンドラ クラスも作成しましたSuccessHandler
。
public class SuccessHandler extends SavedRequestAwareAuthenticationSuccessHandler {
/*
* (non-Javadoc)
*
* @see org.springframework.security.web.authentication.
* SavedRequestAwareAuthenticationSuccessHandler
* #onAuthenticationSuccess(javax.servlet.http.HttpServletRequest,
* javax.servlet.http.HttpServletResponse,
* org.springframework.security.core.Authentication)
*/
@Override
public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response,
Authentication authentication) throws ServletException, IOException {
String url = (String) request.getSession().getAttribute("url_prior_login");
Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal();
if (principal != null && principal instanceof RecipeUser) {
request.getSession().setAttribute("RecipeUser", (RecipeUser) principal);
}
getRedirectStrategy().sendRedirect(request, response, url);
}
}
このクラスは、ユーザーが Web サイトにサインインしたときに、レシピ一覧ページまたはレシピ詳細ページにリダイレクトします。このクラスをsecurity-context.xml
ファイル内に登録します。
<http use-expressions="true" auto-config="false" entry-point-ref="authenticationEntryPoint">
<intercept-url pattern="/login" access="permitAll" />
<form-login login-page="/login" authentication-failure-url="/loginfail"
default-target-url="/login"
authentication-success-handler-ref="successHandler" />
<logout logout-success-url="/" />
</http>
<authentication-manager alias="authManager">
<authentication-provider user-service-ref='myUserDetailsService' />
</authentication-manager>
<beans:bean id="myUserDetailsService" class="com.safe.stack.service.security.UserService">
<beans:property name="dataSource" ref="dataSource" />
</beans:bean>
<beans:bean id="successHandler"
class="com.safe.stack.service.security.SuccessHandler" />
<beans:bean id="authenticationEntryPoint"
class="org.springframework.security.web.authentication.LoginUrlAuthenticationEntryPoint">
<beans:property name="loginFormUrl" value="/login"/>
</beans:bean>
これは私が達成したいことをする良い方法ですか? これを行うより良い方法はありますか?Spring MVC を使用してこれを行う方法の例は見つかりませんでした。
ありがとうございました