如何重定向与应用程序中任何@RequestMapping 参数不匹配的任何 url
How to redirect any url that do not match any @RequestMapping parameter in the application
我在我的 Web 应用程序中使用 Spring MVC。我正在尝试将与模式 http://localhost:8080/my-app/*
匹配的任何 url 重定向到特定控制器。但是如果 url 是这样的,http://localhost:8080/my-app/test
并且如果有控制器如下:
@控制器
@RequestMapping("test")
public class 测试类
{
@RequestMapping(value = "/landing", method = RequestMethod.GET)
public String selectHomePage(ModelMap model)
{
//do something
}
@RequestMapping(value = "/list", method = RequestMethod.GET)
public String listFaqCollections(@ModelAttribute("ownedby") String ownedBy, ModelMap model)
{
//do something
}
}
我还有一个class如下:
@Controller
public class InvalidUrslRedirect
{
@RequestMapping(method = RequestMethod.GET)
public String redirectInvalidUrls(Model model)
{
//do something
}
所有无效的url都会被重定向到上面的controllerclass.
有效的 url 如下:
http://localhost:8080/my-app/test/landing
http://localhost:8080/my-app/test/list?ownedby=me
但是如果 url 是这样的:
http://localhost:8080/my-app/test/list?ownedbys=me
显示正常的 tomcat 404 错误页面,它没有被重定向到 InvalidUrslRedirect
class
在我的 web.xml
文件中,我有以下内容:
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring/core/root-context.xml, classpath:spring/core/spring-security.xml</param-value>
</context-param>
<listener>
<listener-class>
org.springframework.web.context.request.RequestContextListener
</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>
在spring-security.xml
中,我有:
<http auto-config="true" use-expressions="true">
<intercept-url pattern="/**" access="isFullyAuthenticated()"/>
我已经在网上搜索了一段时间,但找不到太多帮助。有什么办法可以实现这样的功能。提前致谢
您的 Web 应用程序设置如何? Spring 正在查找哪些网址?你有 AbstractAnnotationConfigDispatcherServletInitializer 吗?
public class WebApplicationInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
/**
* Configure Spring MVC to handle ALL requests
*/
@Override
protected String[] getServletMappings() {
return new String[] { "/" };
}
@Override
protected Class<?>[] getRootConfigClasses() {
....
}
@Override
protected Class<?>[] getServletConfigClasses() {
....
}
@Override
public void onStartup(ServletContext container) throws ServletException {
...
}
}
如果我没理解错的话,你想重定向除了例如“/测试”。在这种情况下,您需要两种方法:
@RequestMapping(method = RequestMethod.GET)
public String redirectEverythingOtherThanTest(){
return "redirect:/pageToRedirectTo.html"
}
@RequestMapping(value="/test", method = RequestMethod.GET)
public String testRequest(){
//some stuff
return "somepage.html";
}
还要记住 class 上的 @Controller 注释。
我在我的 Web 应用程序中使用 Spring MVC。我正在尝试将与模式 http://localhost:8080/my-app/*
匹配的任何 url 重定向到特定控制器。但是如果 url 是这样的,http://localhost:8080/my-app/test
并且如果有控制器如下:
@控制器 @RequestMapping("test") public class 测试类 {
@RequestMapping(value = "/landing", method = RequestMethod.GET)
public String selectHomePage(ModelMap model)
{
//do something
}
@RequestMapping(value = "/list", method = RequestMethod.GET)
public String listFaqCollections(@ModelAttribute("ownedby") String ownedBy, ModelMap model)
{
//do something
}
}
我还有一个class如下:
@Controller
public class InvalidUrslRedirect
{
@RequestMapping(method = RequestMethod.GET)
public String redirectInvalidUrls(Model model)
{
//do something
}
所有无效的url都会被重定向到上面的controllerclass.
有效的 url 如下:
http://localhost:8080/my-app/test/landing
http://localhost:8080/my-app/test/list?ownedby=me
但是如果 url 是这样的:
http://localhost:8080/my-app/test/list?ownedbys=me
显示正常的 tomcat 404 错误页面,它没有被重定向到 InvalidUrslRedirect
class
在我的 web.xml
文件中,我有以下内容:
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring/core/root-context.xml, classpath:spring/core/spring-security.xml</param-value>
</context-param>
<listener>
<listener-class>
org.springframework.web.context.request.RequestContextListener
</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>
在spring-security.xml
中,我有:
<http auto-config="true" use-expressions="true">
<intercept-url pattern="/**" access="isFullyAuthenticated()"/>
我已经在网上搜索了一段时间,但找不到太多帮助。有什么办法可以实现这样的功能。提前致谢
您的 Web 应用程序设置如何? Spring 正在查找哪些网址?你有 AbstractAnnotationConfigDispatcherServletInitializer 吗?
public class WebApplicationInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
/**
* Configure Spring MVC to handle ALL requests
*/
@Override
protected String[] getServletMappings() {
return new String[] { "/" };
}
@Override
protected Class<?>[] getRootConfigClasses() {
....
}
@Override
protected Class<?>[] getServletConfigClasses() {
....
}
@Override
public void onStartup(ServletContext container) throws ServletException {
...
}
}
如果我没理解错的话,你想重定向除了例如“/测试”。在这种情况下,您需要两种方法:
@RequestMapping(method = RequestMethod.GET)
public String redirectEverythingOtherThanTest(){
return "redirect:/pageToRedirectTo.html"
}
@RequestMapping(value="/test", method = RequestMethod.GET)
public String testRequest(){
//some stuff
return "somepage.html";
}
还要记住 class 上的 @Controller 注释。