ajax没有击中spring mvc控制器

时间:2015-11-06 10:48:17

标签: java spring-mvc servlets

我是spring mvc和hibernate以及jquery的新手。当我使用ajax调用调用spring mvc控制器中的一个函数时,它没有到达那个控制器函数,而且当我在chrome控制台中检查时它会在每次调用时抛出错误 - 'POST http://localhost:8080/springmvc/GetAllUserName 403(Forbidden)'我是也使用带有csrf的spring security。 以下是我的admin.jsp

<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@page session="true"%>
<html>
<head>
    <script type="text/javascript" src="http://code.jquery.com/jquery-2.1.4.min.js"></script>
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css">
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
    <link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/themes/smoothness/jquery-ui.css">
    <script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/jquery-ui.min.js"></script>
    <script>
        function formSubmit() {
            document.getElementById("logoutForm").submit();
        }
        function getAllUserName(){
            var name = $("#name").val();
            var trimmedName = name.trim();
            if(trimmedName!=null){
                $.ajax({
                    type: "POST",
                    url: "GetAllUserName",
                    contentType: "application/json;charset=utf-8",
                    data: JSON.stringify({userName:trimmedName}),
                    dataType: "json",
                    success: function (returnedList) {
                        alert("response");
                    },
                });
            }
        }
    </script>
</head>
<body>

    <c:if test="${pageContext.request.userPrincipal.name != null}">
        <h4 align="right">
            <%-- Welcome : ${pageContext.request.userPrincipal.name} |  --%><a href="javascript:formSubmit()"> Logout</a>
        </h4>
    </c:if>
    Enter User Name: <input type="text" id="name" onkeyup="getAllUserName()" />
    <div id="showList"></div>

    <c:url value="/j_spring_security_logout" var="logoutUrl" />
    <!-- csrt for log out-->
    <form action="${logoutUrl}" method="post" id="logoutForm">
      <input type="hidden" 
        name="${_csrf.parameterName}"
        value="${_csrf.token}" />
    </form>
</body>
</html>

LoginController.java

package com.csc.springmvc.web;

import org.springframework.security.core.userdetails.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class LoginController {
    @RequestMapping(value = { "/**" }, method = RequestMethod.GET)
    public ModelAndView welcomePage() {

        return new ModelAndView("redirect:/admin");
    }

    @RequestMapping(value = "/admin", method = RequestMethod.GET)
    public ModelAndView adminPage() {

        ModelAndView model = new ModelAndView();
        model.setViewName("admin");

        return model;

    }

    //Spring Security see this :
        @RequestMapping(value = "/login", method = RequestMethod.GET)
        public ModelAndView login(
            @RequestParam(value = "error", required = false) String error,
            @RequestParam(value = "logout", required = false) String logout) {

            ModelAndView model = new ModelAndView();
            if (error != null) {
                model.addObject("error", "Invalid username and password!");
            }

            if (logout != null) {
                model.addObject("msg", "You've been logged out successfully.");
            }
            model.setViewName("login");

            return model;

        }

    @RequestMapping(value = "/GetAllUserName", method = RequestMethod.POST)
    @ResponseBody
    public String registerNewUser(@RequestBody User user){
        System.out.println(user.getUsername());
        return "Hello";
    }
}

弹簧基本-context.xml中

<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/security"
    xmlns:beans="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:mvc="http://www.springframework.org/schema/mvc" 
    xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-3.0.xsd
        http://www.springframework.org/schema/tx
        http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
        http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
        http://www.springframework.org/schema/security
        http://www.springframework.org/schema/security/spring-security-3.1.xsd">

    <mvc:resources mapping="/images/**" location="/resources/images/" />
    <mvc:resources mapping="/JSPresources/**" location="/JSPresources/" />

    <context:component-scan base-package="com.csc" />
    <mvc:annotation-driven/>
    <context:annotation-config/> 
</beans:beans>

用SpringMVC-servlet.xml中

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:security="http://www.springframework.org/schema/security"
    xsi:schemaLocation="http://www.springframework.org/schema/mvc 
        http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
        http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-3.0.xsd
        http://www.springframework.org/schema/tx 
       http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
       http://www.springframework.org/schema/aop 
       http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
       http://www.springframework.org/schema/security 
       http://www.springframework.org/schema/security/spring-security-3.1.xsd"> 

    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/views/" />
        <property name="suffix" value=".jsp" />
    </bean>


</beans>

有人可以帮我解决这个问题。

1 个答案:

答案 0 :(得分:1)

您的web.xml servlet映射url-pattern可能限制太多,导致永远无法访问Spring Dispatcher Servlet。尝试:

<servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>