gpt4 book ai didi

security - 如何使用 Spring Security 3.0.x 处理 HTTP 403

转载 作者:IT老高 更新时间:2023-10-28 13:58:01 28 4
gpt4 key购买 nike

我在使用 Spring Security 3.0.x(目前尤其是 3.0.2)时遇到了一点问题。我正在开发的整个应用程序运行良好,除非有人没有权限尝试登录。

当它发生时,用户被重定向到“欢迎”页面,因为他的用户名/密码是有效的,并且他会收到一个可爱的白色页面:“错误 403:访问被拒绝”

所以,我一直在网上寻找如何处理这种行为。到目前为止我已经得出结论,如果我错了,请纠正我,它是由 ExceptionTranslationFilter 管理的。 .但我不太明白如何充分利用这些信息。

我已尝试编辑我的 SecurityContext.xml 以将 access-denied-handler 标记添加到我的 http 标记,但它不起作用。我是否需要添加更多的标签才能使其工作?是否有任何其他可能使我的应用程序更加用户友好?

编辑:我想重定向到一个页面,比如 403.html。

此致,
谢谢

最佳答案

我仍然不明白为什么你必须实现自己的访问处理程序...我目前面临同样的任务:

 <security:access-denied-handler error-page="/accessDenied"/> - works like charm.

不要忘记在 Controller 中指定处理程序:

 @RequestMapping(value = "/accessDenied")
public String accessDenied() {

return "accessDenied"; // logical view name
}

Spring Boot 更新(2014 年 10 月):

@Configuration
@EnableWebSecurity
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {

@Override
protected void configure(HttpSecurity http) throws Exception {
http.exceptionHandling().accessDeniedHandler(customHandler) OR .accessDeniedPage("/somePage.html").and
.formLogin()
.failureHandler(ajaxAuthenticationFailureHandler)}

现在我们并没有真正返回此类任务的 View ,因为 Angular js 开始发挥作用,因此您可以使用失败/成功处理程序并返回定制的 JSON 响应。对我们来说,使用故障处理程序就足够了,但您可以选择您希望控制启动的位置。我们通常不使用 View 解析器,因为有 UI 瓦片框架(例如角度部分)能够将片段构建到单个页面中为你。 Html 片段存储在服务器上,仅作为静态资源提供。

让我们使用 Embedded Tomcat 来实现与 web.xml 类似的行为!

@Configuration
@EnableAutoConfiguration
public class ApplicationWebXml extends SpringBootServletInitializer {

private static final Logger LOGGER = LoggerFactory.getLogger(Application.class);

@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.profiles(addDefaultProfile())
.showBanner(false)
.sources(Application.class);
}

//required for container customizer to work, the numerous tutorials didn't work for me, so I simply tried overriding the default one
@Bean
public EmbeddedServletContainerFactory servletContainer() {
TomcatEmbeddedServletContainerFactory tomcat = new TomcatEmbeddedServletContainerFactory();
return tomcat;
}

@Bean
public EmbeddedServletContainerCustomizer containerCustomizer(

) {
return new EmbeddedServletContainerCustomizer() {
@Override
public void customize(ConfigurableEmbeddedServletContainer container) {
TomcatEmbeddedServletContainerFactory containerFactory = (TomcatEmbeddedServletContainerFactory) container;
containerFactory.setSessionTimeout(1); // just for your interest, remove as necessary

containerFactory.addErrorPages(new ErrorPage(HttpStatus.FORBIDDEN,"/views/accessDenied.html"),
new ErrorPage(HttpStatus.NOT_FOUND,"/views/notFound.html"));
containerFactory.addConnectorCustomizers(new TomcatConnectorCustomizer() {
@Override
public void customize(Connector connector) {
connector.setPort(8082);// just for your interest, remove as necessary
}
});
}
};
}

}

关于security - 如何使用 Spring Security 3.0.x 处理 HTTP 403,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4186697/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com