猿问

一次每次请求过滤器无法设置不同于 404 的错误代码

我有一个弹簧应用程序(不使用弹簧启动)部署到雄猫


我尝试在给定条件下使用 返回特定URL上的错误401() 。HttpServletResponse.SC_UNAUTHORIZEDOncePerRequestFilter


但我不断得到 找不到错误:


Response code: 404

我的过滤器(删除条件):


@Component

public class MyFilter extends OncePerRequestFilter {


    private static final Logger logger = Logger.getLogger(MyFilter.class);

    @Override

    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {


            response.sendError(HttpServletResponse.SC_UNAUTHORIZED, "Not autorized");           

            response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);

            try {

                PrintWriter out = response.getWriter();

                out.write(""); // Empty

                out.flush();

            } catch (IOException e) {

                logger.error("error filtering", e);

            }

            return; // stop chain

    }    

}

我尝试使用与以前类似答案类似的代码


我相信你可以响应.send内部的错误做过滤方法。


编辑


如果我只是抛出一个异常,我得到一个通用错误代码500


Response code: 500

编辑 2


我正在添加过滤器内部的方法覆盖onStartupWebApplicationInitializer


FilterRegistration myFilter = servletContext.addFilter("myFilter ", MyFilter.class);

myFilter.addMappingForUrlPatterns(null, false, "/myservlet/myendpoint/*");

编辑 3


此外,我的过滤器及其软件包包含在组件扫描中@Componenet


@ComponentScan(basePackages = { "my.parent.pacakge"})


qq_遁去的一_1
浏览 156回答 2
2回答

慕慕森

我尝试了你的代码,它的工作原理。成功返回了不同的错误代码。虽然,我想指出几件事 -该方法将响应发送到客户端,并清除响应缓冲区。因此,您之后将其写入响应的任何内容都毫无用处。sendError()呼叫也毫无用处。当您调用 时,HTTP 响应和 HTTP 响应代码已在上一行中发送到客户端。setStatus()sendError()现在,这是我的假设,为什么你的代码不适合你,但它对我有用 -您可能获得 HTTP 404 的原因是您的 API 不存在。这可能是由于拼写错误,也可能是由于一个简单的无知,例如调用您的API命名,即带有额外的尾随正斜杠。我相信您的过滤器正在成功执行,您必须在那里做一些有用的事情,而不是您在问题中解释的示例代码。/foo/bar/foo/bar/sendError()此外,在筛选器中引发异常时,控件不会到达 API,并且不会发生 API 查找。因此,由于未处理的异常而不是 HTTP 404,默认的 HTTP 500 响应将发送到客户端。

慕尼黑的夜晚无繁华

仅当在以下时间之后执行时,它才会按预期返回 401setStatusout.writePrintWriter out = response.getWriter();out.write("");response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
随时随地看视频慕课网APP

相关分类

Java
我要回答