自定义HTTP 403页面在Spring Security中不起作用

逻辑错误

我要替换默认的拒绝访问页面:

HTTP 403

使用我的自定义页面,我的方法是这样的:

@Configuration
@EnableWebSecurity
public class SecurityContextConfigurer extends WebSecurityConfigurerAdapter {

    @Autowired
private UserDetailsService userDetailsService;

@Override
public void configure(WebSecurity web) throws Exception {
    web.ignoring().antMatchers("/resources/**");
}

@Override
protected void configure(HttpSecurity http) throws Exception {

    http.sessionManagement().maximumSessions(1)
            .sessionRegistry(sessionRegistry()).expiredUrl("/");
    http.authorizeRequests().antMatchers("/").permitAll()
            .antMatchers("/register").permitAll()
            .antMatchers("/security/checkpoint/for/admin/**").hasRole("ADMIN")
            .antMatchers("/rest/users/**").hasRole("ADMIN").anyRequest()
            .authenticated().and().formLogin().loginPage("/")
            .defaultSuccessUrl("/welcome").permitAll().and().logout()
            .logoutUrl("/logout");
}

@Bean
public SessionRegistry sessionRegistry() {
    return new SessionRegistryImpl();
}

@Bean
public AuthenticationProvider daoAuthenticationProvider() {
    DaoAuthenticationProvider daoAuthenticationProvider = new DaoAuthenticationProvider();
    daoAuthenticationProvider.setUserDetailsService(userDetailsService);

    return daoAuthenticationProvider;

}

@Bean
public ProviderManager providerManager() {

    List<AuthenticationProvider> arg0 = new CopyOnWriteArrayList<AuthenticationProvider>();
    arg0.add(daoAuthenticationProvider());

    return  new ProviderManager(arg0);

}

@Bean(name = "myAuthenticationManagerBean")
@Override
public AuthenticationManager authenticationManagerBean() throws Exception {
    return super.authenticationManagerBean();
}

@Override
protected AuthenticationManager authenticationManager() throws Exception {
    return providerManager();
}

    @Bean
    public ExceptionTranslationFilter exceptionTranslationFilter() {
        ExceptionTranslationFilter exceptionTranslationFilter = 
                new ExceptionTranslationFilter(new CustomAuthenticationEntryPoint());
        exceptionTranslationFilter.setAccessDeniedHandler(accessDeniedHandler());

        return exceptionTranslationFilter;
    }
    @Bean
    public AccessDeniedHandlerImpl accessDeniedHandler() {
        AccessDeniedHandlerImpl accessDeniedHandlerImpl = new 
                AccessDeniedHandlerImpl();
        accessDeniedHandlerImpl.setErrorPage("/page_403.jsp");
        System.out.println("ACCESS DENIED IS CALLED......");
        return accessDeniedHandlerImpl;
    }

    private class CustomAuthenticationEntryPoint implements AuthenticationEntryPoint{

        @Override
        public void commence(HttpServletRequest request, HttpServletResponse response,
                AuthenticationException authenticationException) throws IOException,
                ServletException {

            response.sendError(HttpServletResponse.SC_FORBIDDEN,
                    "Access denied.");
        }

    }   

}

但是有了上面的配置,我仍然没有完成工作并且看到相同的结果

HTTP 403

为此还需要注入更多的豆吗?

阿尔沙德·阿里(Arshad Ali)

免责声明:这不仅是解决方案,而且是可行的解决方案。

在这种情况下,我的方法将尽可能简单,即在您的SecurityContext中添加此方法

@Override
protected void configure(HttpSecurity http) throws Exception {

    http.sessionManagement().maximumSessions(1)
            .sessionRegistry(sessionRegistry()).expiredUrl("/");
    http.authorizeRequests().antMatchers("/").permitAll()
            .antMatchers("/register").permitAll()
            .antMatchers("/security/checkpoint/for/admin/**").hasRole("ADMIN")
            .antMatchers("/rest/users/**").hasRole("ADMIN").anyRequest()
            .authenticated().and().formLogin().loginPage("/")
            .defaultSuccessUrl("/welcome").permitAll().and().logout()
            .logoutUrl("/logout").and()
            .exceptionHandling().accessDeniedPage("/page_403");//this is what you have to do here to get job done.
}

参考:Spring Security中的Custom 403 Page

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

403自定义登录页面错误Spring Security

Tomcat:自定义错误页面不起作用

Spring中的自定义约束验证器不起作用

Spring Security Java Config自定义注销处理程序不起作用

烧瓶自定义错误页面500不起作用

MVC6中的自定义选择性404页面

流明中的自定义404页面

如何在Dropwizard中查看自定义404页面

为什么我的自定义404页面在Django中返回“ 404 OK”响应?

如何在Angular Project中为自定义404页面设置路线

如何在Laravel 5.7中创建自定义404页面?

自定义MessageConverter在Spring Boot中不起作用

Jenkins中HTTP 404页面URL的自定义页面

自定义协议处理程序在SSL页面上的Chrome中不起作用

内容树中Sitecore中的自定义404页面

在IIS 7中自定义HTTP 400错误页面

为什么自定义错误页面在我的Nginx配置中不起作用?

子文件夹Codeigniter中的自定义404页面

自动装配服务在Spring Security Java配置自定义身份验证提供程序中不起作用

Spring Security自定义身份验证提供程序不起作用

自定义错误页面在 Laravel 5.3 中不起作用

spring security 自定义身份验证不起作用

在 Django 中设置 http 错误自定义页面

带有自定义登录表单的 Spring Security 不起作用

向 Xamarin 的 PDFTron.Android 中不起作用的页面添加自定义视图

如何修复自定义 404 页面在 NextJS 中不起作用

如果使用自定义颜色,则“setState”在导航页面中不起作用

在 Github Pages 中删除自定义页面后,原始页面不起作用

登录在 Spring Security 的自定义登录页面中不起作用