当前位置: 首页 > 面试题库 >

春季启动:accessDeniedHandler不起作用

相诚
2023-03-14
问题内容

我有以下Spring Security配置:

@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests().antMatchers("/api/private/**", "/app/**").authenticated();
        http.csrf().disable();
        http.logout().logoutSuccessUrl("/");
        http.exceptionHandling().accessDeniedPage("/403"); //.accessDeniedHandler(accessDeniedHandler);
    }
}

我期望以下逻辑:未经身份验证的用户将被重定向到/403。Spring会显示默认的Tomcat
403页面,而不是该页面。我也尝试过自定义,accessDeniedHandler尽管没有成功。

如何在访问失败时实施自定义逻辑?


问题答案:

AccessDeniedHandler仅适用于经过身份验证的用户。未经身份验证的用户的默认行为是重定向到登录页面(或适用于所使用的身份验证机制的任何内容)。

如果要更改,则需要配置AuthenticationEntryPoint,当未经身份验证的用户尝试访问受保护的资源时会调用。您应该可以使用

http.exceptionHandling().authenticationEntryPoint(...)

而不是你所拥有的。有关更多详细信息,请查看API文档。



 类似资料:
  • 问题内容: 我的Maven依赖项出了什么问题。当我包含JPA时,我会列出pf例外 这是我的Maven依赖项 我的例外 和我的源代码 因此,我没有任何想法(不幸的是,没有示例)如何运行Spring boot和休眠两者。 问题答案: 您是否为数据源设置了或?这是一个例子: 有关可以在何处放置配置文件以及如何配置应用程序以处理任何目录中的属性文件的说明,请参阅此链接以获取更多信息。

  • 问题内容: 我目前正在使用Spring编写API后端,我想使用Spring Boot部署到生产服务器上。 如果我在Eclipse中运行后端以编译为War(在Maven中指定),并使用Tomcat 7,则它可以正常运行。 但是,当我想部署到服务器时,我正在使用Spring Boot。 应用程序 pom.xml 当我将整个项目复制到Linux服务器上并运行 maven package时 ,代码可以毫无

  • 问题内容: 我试图将Spring集成到具有数千个类的大型应用程序中,并且由于组件扫描,我在启动容器时遇到了巨大的延迟。 我已经将“基本软件包”中指定的目录数量缩小到最小,以减少扫描无关目录所浪费的时间,但是初始化的类路径扫描部分仍然需要大约1-2分钟。 那么,有没有一种方法可以优化扫描过程?我曾考虑过将候选类路径存储在文件中,然后使容器从文件中获取,而不是每次启动时都扫描类路径,但是我真的不知道从

  • 问题内容: 我正在使用logback库在spring boot项目中实现日志记录。我想根据我的spring配置文件(属性“ spring.pofiles.active”)加载不同的日志记录配置文件。我有3个文件:logback-dev.xml,logback- inte.xml和logback-prod.xml。我正在使用Spring Boot版本1.2.2.RELEASE。 如您在Spring

  • 问题内容: 我是spring的新手,我使用https://start.spring.io/创建了一个新的spring boot项目,没有更多依赖关系,解压缩了zip文件并在IntelliJ IDEA中打开了该项目。我没有做任何进一步的配置。我现在正在尝试使用@PostConstruct方法设置bean-但是,该方法从未被spring调用。 这些是我的课程: SpringTestApplicatio

  • 问题内容: 在应用程序中,我可以使用以下命令指定自定义日志文件: 但是,如果我不指定一个,它会去哪儿? 我在以下任何文件夹中找不到它: 我 不 具备或任何其他日志记录的依赖。 我希望有类似的东西,因为默认配置运行嵌入式Tomcat: 问题答案: Spring Boot使用Commons Logging进行所有内部日志记录,但是使底层日志实现保持打开状态。 提供了Java Util Logging,