Spring Controller не вызывается при вводе расширения файла JSP в URL - PullRequest
1 голос
/ 26 февраля 2012

Я использую Spring MVC и Spring Security 3.

Моя проблема в том, что если я вызываю сервлет как www.mydomain.com/app.do, все работает нормально, значит, вызывается контроллер. Но если позвонить www.mydomain.com/app.jsp, контроллер не будет вызван. То же самое для login.do servlet и login.jsp file.

Физический файл app.jsp находится в корневом каталоге / .

Это ожидаемое поведение Spring MVC? Могу ли я каким-то образом заставить этот пружинный mvc также обработать файл JSP? Или вообще запретить звонить по URL? Как это обычно обрабатывается?

web.xml

...
    <!-- Spring Security filter mapping -->   
    <filter-mapping>
        <filter-name>springSecurityFilterChain</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping> 

    <!-- Spring MVC servlet mapping -->
    <servlet-mapping>
        <servlet-name>spring-mvc</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>
...

весна-MVC-servlet.xml

...
    <context:component-scan base-package="ch.hobus.metronom.server" />

    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/" />
        <property name="suffix" value=".jsp" />
    </bean>
...

весна-безопасности XML

...
<http auto-config="true">
    <intercept-url pattern="/app*" access="ROLE_USER" />
    <intercept-url pattern="/metronom/**" access="ROLE_USER" />
    <intercept-url pattern="/gwt/**" access="ROLE_USER" />
    <intercept-url pattern="/**" access="IS_AUTHENTICATED_ANONYMOUSLY" />
    <form-login login-page="/login.do" 
                    default-target-url="/app.do"
                    authentication-failure-url="/loginfailed.do" />
    <logout logout-success-url="/logout.do" />
</http>
...

LoginController.java

@Controller
public class LoginController {

  @RequestMapping(value = "/login.do", method = RequestMethod.GET)
  public String login(ModelMap model) {
    return "login";
  }

  @RequestMapping(value = "/loginfailed.do", method = RequestMethod.GET)
  public String loginerror(ModelMap model) {
    model.addAttribute("error", "true");
    return "login";
  }

  @RequestMapping(value = "/logout.do", method = RequestMethod.GET)
  public String logout(ModelMap model) {
    return "login";
  }

}

AppController.java

@Controller
public class AppController {

  @RequestMapping(value = "/app.do", method = RequestMethod.GET)
  public ModelAndView app(ModelMap model, Principal principal) {
    ModelAndView mav = new ModelAndView();
    mav.setViewName("app");
    mav.addObject("username", principal.getName());
    mav.addObject("message", "Metronom's benutzerdefiniertes Formular");
    return mav;
  }

}

1 Ответ

2 голосов
/ 26 февраля 2012

Да, это ожидаемое поведение.Если вы попросите JSP, вы получите JSP.Решения:

  • не содержат ссылки на какой-либо JSP в веб-приложении
  • сохраните JSP в / WEB-INF
  • , чтобы отобразить сервлет Spring/* (но затем он также будет вызываться для изображений, файлов CSS и т. Д. Вам придется использовать mvc: resources для разрешения этой ситуации).
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...