我试图添加一个过滤器,该过滤器创建一个对象,然后在Spring Boot应用程序的控制器内部使用该对象。
想法是将过滤器用作此对象的“集中式”生成器-特定于请求且仅在控制器中有用。我尝试使用该HttpServletRequest request.getSession().setAttribute方法:我可以在控制器中访问我的对象,但是(显然)它将被添加到会话中。
HttpServletRequest request.getSession().setAttribute
过滤器是正确的方法吗?如果是,我可以在哪里 保留 由过滤器生成的临时对象供控制器使用?
您可以使用 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() { } } }