0

我正在尝试将 Spring 安全性集成到使用 java config 的应用程序中。

按照 Spring Security 3.1 一书中的示例,我设法让自动生成的登录页面工作。但是当我尝试用自定义页面替换它时,我得到了

No mapping found for HTTP request with URI [/myapp/login/form]

我还注意到,虽然本书的示例项目的 jsps 可以包含诸如

"/resources/css/main.css"

它们在我的应用程序中不起作用,而是我必须在它们前面加上“../”

不同之处在于我的应用程序也将 java config 用于 servlet 映射(“/”),而本书的示例使用 web.xml(也是“/”)

我的应用程序找不到 /resources 但 ../resources 并且也找不到登录页面的原因可能是什么?

我的 web.xml

<display-name>My Web Application</display-name>

<context-param>
    <param-name>contextConfigClass</param-name>
    <param-value>com.myapp.config.AppInitializer</param-value>
</context-param>

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
        /WEB-INF/spring/security.xml
    </param-value>
</context-param>

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<filter>
    <filter-name>springSecurityFilterChain</filter-name>
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
    <filter-name>springSecurityFilterChain</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

和 AppInitializer 类:

public class AppInitializer implements WebApplicationInitializer {

@Override
public void onStartup(ServletContext context) throws ServletException {
    AnnotationConfigWebApplicationContext root = new AnnotationConfigWebApplicationContext();
    root.register(ApplicationContext.class);
    ServletRegistration.Dynamic dispatcher = context.addServlet("dispatcher", new DispatcherServlet(root));
    dispatcher.setLoadOnStartup(1);
    dispatcher.addMapping("/");
    }
}

请求映射处理程序等在 AppInitializer 引用的 ApplicationContext.class 中定义。它们与书中的示例相同。

此外,login.jsp 目前与示例项目相同。

4

0 回答 0