想法:我想用HTTP基本身份验证来保护Spring Web MVC的每个站点,但是如果出现40 *或500服务器错误,希望通过错误页面重定向到/ welcome (当然用户必须经过身份验证,否则他将看到基本身份验证对话框。)
问题:每次尝试访问该网站时,都会按预期弹出基本身份验证对话框。但当我取消对话框时,按下取消我登陆受保护的欢迎页面[并查看所有重要/安全信息] - 没有基本的身份验证对话框!
样本控制器:
@Controller
public class WelcomeController
{
// Welcome is a protected site!
@RequestMapping(value = {"/", "/welcome"}, method = RequestMethod.GET)
public ModelAndView welcome()
{
return new ModelAndView("welcome");
}
}
安全配置:
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class SecurityConfiguration extends WebSecurityConfigurerAdapter
{
@Override
protected void configure(HttpSecurity security) throws Exception
{
// Set the security settings
security.httpBasic().and().authorizeRequests().anyRequest().authenticated().and().csrf();
}
}
的web.xml:
<?xml version="1.0" encoding="UTF-8"?>
... Snipped ...
<servlet-mapping>
<servlet-name>testapp</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<error-page>
<error-code>400</error-code>
<location>/welcome</location>
</error-page>
<error-page>
<error-code>401</error-code>
<location>/welcome</location>
</error-page>
<error-page>
<error-code>403</error-code>
<location>/welcome</location>
</error-page>
<error-page>
<error-code>404</error-code>
<location>/welcome</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/welcome</location>
</error-page>
</web-app>
答案 0 :(得分:1)
我还必须为客户实施相同的设置。此外,我们的应用程序服务器前面有一个Web应用程序防火墙。
我仍然不知道Tomcat如何忽略Spring的身份验证检查。重要的是不要乱用401,402和403 HTTP代码(我从web.xml中删除了它们的处理程序)
我最终得到了一般错误页面。如果您自己应该处理500个错误,那么可以讨论。如果您的系统抛出500错误,您可能无法处理它,因为您的系统刚刚抛出500错误,并且您将在错误处理过程中遇到另一个500错误 - &gt;使用简单的模型和视图,静态HTML站点或重定向到错误处理程序servlet。
Spring security:
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class SecurityConfiguration extends WebSecurityConfigurerAdapter
{
@Override
protected void configure(HttpSecurity security) throws Exception
{
// Set the security settings
security.httpBasic().and().authorizeRequests().anyRequest().authenticated().and().csrf();
}
}
的web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1">
<!-- Snipped -->
<error-page>
<error-code>404</error-code>
<location>/error</location>
</error-page>
</web-app>
404错误操作:
@Controller
public class ErrorController
{
@RequestMapping(value = "/error", method = RequestMethod.GET)
public ModelAndView addresses()
{
return new ModelAndView("error"); // Or redirect to /welcome
}
}