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

2024-04-24

我在 Spring Security 3.0.x(特别是目前的 3.0.2)方面遇到了一个小问题。我正在开发的整个应用程序运行完美,除非没有权限的人尝试登录。

当发生这种情况时,用户会被重定向到“欢迎”页面,因为他的用户名/密码有效,并且他会收到一个可爱的白色页面,其中包含以下内容:“错误 403:访问被拒绝”

因此,我一直在网上寻找如何处理这种行为的方法。到目前为止我得出的结论是,它是由异常翻译过滤器 http://static.springsource.org/spring-security/site/docs/3.0.x/apidocs/org/springframework/security/web/access/ExceptionTranslationFilter.html。但我不太明白如何充分利用这些信息。

我尝试编辑我的 SecurityContext.xml 以添加拒绝访问处理程序标记到我的http标签,但是不起作用。我是否需要添加比此标签更多的内容才能使其正常工作?还有其他可能性可以使我的应用程序更加用户友好吗?

Edit:我想重定向到一个页面,例如 403.html。

真诚的,
Thanks


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

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

不要忘记在控制器中指定处理程序:

 @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)} 

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

让我们使用嵌入式 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
                }
            });
        }
    };
}

}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 Spring Security 3.0.x 处理 HTTP 403 的相关文章

随机推荐