Spring 的拦截器如何实现url转发? 400 报错
如何实现Spring 的过滤器代码中改写请求的URL,并转发出去,注意,是转发,不是重定向
package com.blog.inteceptor; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; import com.blog.entity.User; public class HandlerInteceptor implements HandlerInterceptor{ public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3) throws Exception { System.out.println("执行后"); } public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3) throws Exception { System.out.println("....."); } public boolean preHandle(HttpServletRequest request, HttpServletResponse res, Object arg2) throws Exception { System.out.println("拦截用户"); String url = request.getScheme() +"://" + request.getServerName() + ":" +request.getServerPort() + request.getServletPath(); System.out.println(url); //在这里使用forward实现转发,而不是使用redirect实现重定向 return true; } }我需要在上述代码中的方法中将请求的URL换成另外一个url,然后转发出去。
不是有response吗?######回复 @留在青山 : response可以重定向跟服务端转发啊。######Response是重定向。。。。。######request.getRequestDispatcher("/url").forward(request, response)######回复 @留在青山 : 最后要return false 试试;######回复 @留在青山 : 什么异常?你的说法都可以颠覆servlet了。######你可以试试在filter中写这个代码,应该会报异常,我试过了。######response######你试了response不会改变浏览器的url吗?######可以考虑模拟http的get和post请求,请求参数都可以通过当前服务器的请求获取到,url你自己的代码也都拼接号了,剩下的httpo模拟请求代码网上都有的~######
可以尝试 将HttpServletRequest给wrap掉。 我以前是为了替换body,你这是替换header。
######已经解决了,没使用拦截器来转发,我在controller层的@RequestMapping中使用正则表达式解决了拦截符合一定url规则,在controller中实现了转发。版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。