一个简单根据session过滤结果的过滤器,代码如下:
@Configuration
public class WebMvcConfigurer extends WebMvcConfigurerAdapter {
private String deniy="{denied:需要登陆}";
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new HandlerInterceptorAdapter() {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
Object handler) throws Exception {
if(request.getSession().getAttribute("user")==null)
{
OutputStream write=response.getOutputStream();
write.write(deniy.getBytes("UTF-8"));
write.flush();
write.close();
return false;
}
return true;
}
}).addPathPatterns("/add/*").addPathPatterns("/update/*").addPathPatterns("/del/*");
}
}
可spring框架说输出流已经被获取过了,可我就这么一个过滤器啊,而且return false后应该不会进一步进入控制器处理吧?
回答
不要直接使用OutputStream,使用PrinterWriter
PrintWriter printWriter = response.getWriter();
printWriter.write("DENY");
printWriter.flush();
return false;