コントローラーで取得すると LoginModel フィールド (strLogintype、strUserType) が「null」になるため、春のセキュリティと共に「commandName」属性を使用すると、フロントエンドから選択されたドロップダウン値が取得されません。
しかし、春のセキュリティを使用していないときは、同じコードで問題なく動作します。
私のログイン JSP コードは次のようになります。
<script>
$(document).ready(function() {
$type = $("select[id='userType']");
$page = $("select[id='signInPage']");
$("<option>Account Summary</option>").appendTo($page);
$("<option>Basket Order</option>").appendTo($page);
$("<option>Portfolio</option>").appendTo($page);
$type.change(function() {
...
});
});
</script>
<c:set var = "url" value = "/j_spring_security_check" />
<form:form method="post" commandName="portalLogin" action="${pageContext.servletContext.contextPath}${url}" name="f">
<form:select path ="strUserType" style="font-family: tahoma;font-style: normal;font-size: 11px;" id="userType">
<form:option value="retail" selected="selected">Retail</form:option>
<form:option value="admin">Admin</form:option>
</form:select>
<div class="left"><spring:message code="label.startIn" /></div>
<form:select path="strLogintype" style="font-family: tahoma;font-style: normal;font-size: 11px;" id="signInPage" > </form:select>
私のコントローラーコードは次のようなものです:
@RequestMapping("/signIn")
public ModelAndView onClickLogin(
@ModelAttribute("portalLogin") LoginModel loginModel, Model model,HttpServletRequest request) {
strLoginPg = loginModel.getStrLogintype();
if (strLoginPg != null && strLoginPg.equals("Basket Order")) {
return new ModelAndView("redirect:BasketOrders.html");
} else if (strLoginPg != null && strLoginPg.equals("Portfolio")) {
return new ModelAndView("redirect:portfolio.html");
} else if (strLoginPg != null && strLoginPg.equals("Account Summary")) {
return new ModelAndView("redirect:accountSummary.html");
} else if (strLoginPg != null && strLoginPg.equals("General Settings")) {
return new ModelAndView("redirect:settings.html");
} else{
return new ModelAndView("redirect:adminConfig.html");
}}
[更新]: 2 つの方法を試しました。
カスタム authenticationsuccesshandler を作成しました。LoginController はそのままです。アプリケーションを実行すると、CustomSimpleURLAuthenticationSuccessHandler が起動されていることがわかりますが、ここでも、選択したドロップダウン値をコントローラーのフロントエンドから取得しておらず、代わりに null です。別のページ (adminConfig) に移動します。
2番目の方法:
以前のコードに戻しました。LoginController の「onClickLogin」メソッドに @RequestParam 属性を使用しました。
@RequestMapping("/signIn")
public ModelAndView onClickLogin(
@ModelAttribute("portalLogin") LoginModel loginModel, @RequestParam("strLogintype") String strtype, Model model,HttpServletRequest request) {
jsp ページ:
<form:select path="strLogintype" name="strLogintype" style="font-family: tahoma;font-style: normal;font-size: 11px;" id="strLogintype" >
しかし、「HTTP ステータス 400 - 必要な文字列パラメーター 'strLogintype' が存在しません」というエラーが表示されます。また、「クライアントから送信されたリクエストは構文的に正しくありませんでした」とも表示されます。ここで何がうまくいかないのですか?また、@RequestParam は、jsp ページで「選択された」ドロップダウン値を取得する目的を果たしますか。
コントロールがSpring Securityに移行し、コントローラーが呼び出されたときに、選択したドロップダウン値を保持するにはどうすればよいですか?