0

POST メソッドを使用して Spring MVC コントローラーの post メソッドを呼び出そうとしていますが、これがコントローラーのメソッドです

@Controller
@RequestMapping("springSecurity/login.json")
public class SpringSecurityLoginController
{

    @RequestMapping(method = RequestMethod.GET)
        @ResponseBody
        public SpringSecurityLoginStatus getStatus()
        {
            return springSecurityLoginService.getStatus();
        }

        @RequestMapping(method = RequestMethod.POST)
        @ResponseBody
        public SpringSecurityLoginStatus login(@RequestParam("j_username") final String username,
                @RequestParam("j_password") final String password, final HttpServletRequest request, final HttpServletResponse response)
        {

            LOG.info("Starting login process");
            return springSecurityLoginService.login(username, password, request, response);
        }
}

HTML

<form:form action="${request.contextPath}/j_spring_security_check" class="login-form " id="loginForm"  method="post" commandName="loginForm">

<form:input path="j_username" class="text" id="login_id" value="" name ="j_username"/>
<form:password path="j_password" class="text" value="Password" name="j_password" id="j_password"/>
<input type="submit" class="submit" value="LOGIN" id="login" />
</form:form>

ここに私のJqueryコードがあります

jQuery("#login").live('click', function(e) {
        e.preventDefault();

        jQuery.ajax({url: getHost() + "${request.contextPath}/springSecurity/login.json",
            type: "POST",
            beforeSend: function(xhr) {
                xhr.withCredentials = true;
            },
            data: jQuery("#loginForm").serialize(),
            success: function(data, status) {
                if (data.loggedIn) {
                   // location.href = getHost() + '${ctx}/users';
                    //login_pannel

                } else {
                    loginFailed(data);
                }
            },
            error: loginFailed
        });
    });

しかし、上記のコードは呼び出しています

@RequestMapping(method = RequestMethod.GET)
@ResponseBody
public SpringSecurityLoginStatus getStatus()

そしてそうではない

@RequestMapping(method = RequestMethod.POST)
@ResponseBody
public SpringSecurityLoginStatus login(@RequestParam("j_username") final String username,
@RequestParam("j_password") final String password, final HttpServletRequest request, final HttpServletResponse response)

この動作が発生する理由がわかりません

4

2 に答える 2

0

通常のHTTPPOST用に設計されたサーバー側のコードを使用していると思いますが、成功するとリダイレクトGETが続きます。

Ajaxを実行したい場合(そしてユーザーログインのためにAjaxを実行することは非常に危険な状況であり、軽視されるべきではありません)、JSONなどのより適切なものを返し、リダイレクトは実行しないでください。

Firebug for Firefoxの[ネット]タブで、その302応答を開き、応答ヘッダーを確認します。ブラウザにリダイレクトするように指示しているLocationヘッダーがそこにあることがわかると思います。

于 2012-06-14T07:36:52.937 に答える