grails - Spring Security 插件应该响应 401 而不是 403

标签 grails spring-security

当 Web session 过期时,Spring Security 会以 403 HTTP 状态响应。理想情况下,它会以 401 响应。未经授权和禁止是不同的。如果存在有效 session ,则对 protected 资源的请求仅应返回 403,但用户只是没有对所述资源的权限。如果资源是安全的并且没有经过身份验证的 session ,那么 Spring Security 应该返回 401。

我的应用程序需要非常具体地区分这两个错误代码。

我的问题是,如何自定义此行为?为了引用我关于 401 和 403 之间差异的论点,read this .

最佳答案

这是我的解决方案:

@Configuration
public class WebCtxConfig  implements BeanPostProcessor {

        @Override
        public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
            if (bean instanceof SessionManagementFilter) {
                SessionManagementFilter filter = (SessionManagementFilter) bean;
                filter.setInvalidSessionStrategy(new InvalidSessionStrategy() {

                    @Override
                    public void onInvalidSessionDetected(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
                        response.sendError(HttpServletResponse.SC_UNAUTHORIZED);
                    }
                });
            }
            return bean;
        }

        @Override
        public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
            return bean;
        }
    }

关于grails - Spring Security 插件应该响应 401 而不是 403,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30606164/

相关文章:

java - 我在哪里可以找到 springloaded-core jar 的源代码?

java - 有没有一种方法可以防止请求使用过滤器到达 grails 中的操作

java - Spring Security 身份验证被忽略

java - postman 显示 HTML 而不是 JSON

java - Spring 3 和 NTLM 身份验证

java - Spring Security 获取后访问被拒绝 403

grails - 如何在Grails应用程序中基于m.mysite.com重定向到移动页面

grails - Grails 3和Spring Security插件

tomcat - 是否可以在 Tomcat 上下文停止时关闭 QuartzScheduler?

java - 使用 spring boot 应用程序启用 HTTP 严格传输安全 (HSTS)