Rob*_*rto 6 spring spring-boot
我正在尝试添加一个Filter,它创建一个对象,然后在Spring Boot应用程序的控制器中使用.
我们的想法是将Filter用作此对象的"集中式"生成器 - 这是特定于请求的,仅在控制器中有用.我试过使用这个HttpServletRequest request.getSession().setAttribute
方法:我可以在控制器中访问我的对象,但随后它会(明确地)添加到会话中.
滤波器是否是正确的方法?如果是,我在哪里可以保持过滤器生成的临时对象供控制器使用?
ima*_*era 10
为什么不使用Bean @Scope('request')
@Component
@Scope(value="request", proxyMode= ScopedProxyMode.TARGET_CLASS)
class UserInfo {
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
private String password;
}
Run Code Online (Sandbox Code Playgroud)
然后你可以Autowireed
在过滤器和控制器中使用这个bean来设置和获取数据.
这个UserInfo
bean的生命周期只在请求中存在,所以一旦http请求完成,它也会终止实例
你可以使用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() {
}
}
}
Run Code Online (Sandbox Code Playgroud)
小智 8
对 wcong 答案的补充。从 Spring 4.3 开始,使用 设置属性后request.setAttribute(passKey, passValue);
,您可以通过简单地使用 注释来访问控制器中的属性@RequestAttribute
。
前任。
@RequestMapping("/")
public String index(@RequestAttribute passKey) {
return (String) passKey;
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
8262 次 |
最近记录: |