小编典典

Spring:如何将对象从过滤器传递到控制器

spring-boot

我试图添加一个过滤器,该过滤器创建一个对象,然后在Spring Boot应用程序的控制器内部使用该对象。

想法是将过滤器用作此对象的“集中式”生成器-特定于请求且仅在控制器中有用。我尝试使用该HttpServletRequest request.getSession().setAttribute方法:我可以在控制器中访问我的对象,但是(显然)它将被添加到会话中。

过滤器是正确的方法吗?如果是,我可以在哪里 保留 由过滤器生成的临时对象供控制器使用?


阅读 358

收藏
2020-05-30

共1个答案

小编典典

您可以使用 ServletRequest.setAttribute(String name,Object o);

例如

@RestController
@EnableAutoConfiguration
public class App {

    @RequestMapping("/")
    public String index(HttpServletRequest httpServletRequest) {
        return (String) httpServletRequest.getAttribute(MyFilter.passKey);
    }

    public static void main(String[] args) {
        SpringApplication.run(App.class, args);
    }

    @Component
    public static class MyFilter implements Filter {

        public static String passKey = "passKey";

        private static String passValue = "hello world";

        @Override
        public void init(FilterConfig filterConfig) throws ServletException {

        }

        @Override
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
                throws IOException, ServletException {
            request.setAttribute(passKey, passValue);
            chain.doFilter(request, response);
        }

        @Override
        public void destroy() {

        }
    }
}
2020-05-30