我正在尝试将 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 目前与示例项目相同。