开发中很常见的一个用例,操作完成后返回操作页面。
用代码表示就是:
response.sendRedirect(request.getHeader("referer"));
spring MVC里有RedirectView,如果能够把referer带上就更方便了。好在spring很灵活,自己增加这个功能吧。
实现一个View接口:
public class RefererRedirectView implements View{
protected static final Log logger = LogFactory.getLog(RefererRedirectView.class);
/* (non-Javadoc)
* @see org.springframework.web.servlet.View#getContentType()
*/
public String getContentType() {
return null;
}
/* (non-Javadoc)
* @see org.springframework.web.servlet.View#render(java.util.Map, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
*/
public void render(Map model, HttpServletRequest request,
HttpServletResponse response) throws Exception {
String returnUrl = request.getHeader("referer");
if(returnUrl==null || returnUrl.trim().equals("")){
returnUrl = "/";
}
logger.debug("referer url["+returnUrl+"]");
response.sendRedirect(returnUrl);
}
}
ViewResolver 这个接口的实例可以在spring容器里有多个,组成一个链式结构,第一个如果无法处理转交下一个,直到被处理或全部失败。
再实现一个ViewResolver接口:
public class RefererViewResolver implements ViewResolver,Ordered {
protected Log logger = LogFactory.getLog(getClass());
//以referer:起始的viewName,将被此ViewResolver处理
public static final String REFERER_PROFIX = "referer:";
/* (non-Javadoc)
* @see org.springframework.web.servlet.ViewResolver#resolveViewName(java.lang.String, java.util.Locale)
*/
public View resolveViewName(String viewName, Locale locale)
throws Exception {
if (!viewName.startsWith(REFERER_PROFIX)) {
return null;
}
logger.debug("this is referer view.");
return new RefererRedirectView();
}
/* (non-Javadoc)
* @see org.springframework.core.Ordered#getOrder()
*/
public int getOrder() {
return Integer.MAX_VALUE-1;//这个ViewResolver排在UrlBasedViewResolver前一个的位置
}
}
最后,在配置文件中声明这个viewResolver:
<bean class="com.........RefererViewResolver"/>
这样,凡是以referer:起始的viewName,都会被redirect到请求发起的页面。
附测试类:
@Controller
public class SomeController {
@RequestMapping("/test_referer.do")
public String referer(){
System.out.println("do some thing ,then return to referer.");
return "referer:";
}
@RequestMapping("/test_test1.do")
public String test1(){
return "front/user/test1";
}
@RequestMapping("/test_test2.do")
public String test2(){
return "front/user/test2";
}
}
分享到:
相关推荐
本篇文章主要是对javascript操作referer进行了详细的介绍,需要的朋友可以过来参考下,希望对大家有所帮助
如何增加Referer功能--反向链接插件
nginx模块ngx_http_referer_module通常用于阻挡来源非法的域名请求,我们应该牢记。下面这篇文章主要介绍了nginx利用referer指令实现防盗链配置的相关资料,需要的朋友可以参考借鉴,下面来一起看看吧。
HTTP headers是HTTP请求和相应的核心模块,它承载了关于客户端浏览器、请求页面、服务器等相关信息。Referer是HTTP头中的一个属性,告诉服务器我是从哪个页面链接过来的。
本代码是处理android hybrid混合应用,遇到的webview 拦截 header referer 问题的解决。 场景:angular $HTTP 或者js的http请求或者其他。。webview成功拦截get 、post、delete请求,添加header,referer以及body ...
laravel-referer, 记住原始访问者引用者 记得一个访问者引用者 在会话中记住访问者的原始引用者。 引用程序为( 优先优先级优先):utm_source 查询参数如果URL中存在外部主机,则来自请求头的Referer的域空白安装你...
install referer是一个开源应用程序,允许您在google play store上测试referer属性。
HTTP Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的
非常感谢您从家乡寄给我们一张明信片,其中提到您使用的是哪个包装。 您可以在上找到我们的地址。 我们将所有收到的明信片发布在。 安装 您可以通过composer安装该软件包: composer require spatie/laravel-...
在我的用例中,我们的网站必须设置一个跟踪Cookie,该跟踪Cookie对于来自Google,AOL,Yahoo或MSN的用户将具有不同的值。 我必须测试在所有情况下都正确设置了cookie。 当我开始编写测试用例时,我发现没有在...
如有必要,“替换”和“目标”操作将创建一个Referer标头,其他仅修改或删除现有标头。 可以将配置导出为JSON文件,也可以从JSON文件导入。 安装 用户应从安装插件。 如果您正在处理代码,则可以使用Firefox about...
1. 什么是Referer? Referer 是 HTTP 请求(requset) header 的一部分,当浏览器(或者模拟浏览器行为)向web 服务器发送请求的时候,头信息里就有包含 Referer 。...3.给山寨网站取一个域名www.361.com,到tomcat目
超全面javaweb教程28天第10天_12_request之使用Referer请求头完成防盗链
1、在 http://svn.referer.cn/referer_lite/package/下载 referer_lite.rar 的压缩包 2、解压后将文件夹内所有内容上传到你的空间根目录下referer文件夹内,按照提示修改数据库名称。 然后进入http://你的域名/...
实现了修改HTTP Header 中Referer的BHO插件
IE可以识别的 HTTP_REFERER 提交是通过click 触发的事件或者是 Form 表单提交的请求,下面是根据网上的资料总结的一个方法: [removed] function referURL(url){ var isIe=(document.all)?true:false; if(isIe) { ...
mod_access_referer
比如从我主页上链接到一个朋友那里,他的服务器就能够从HTTP Referer中统计出每天有多少用户点击我主页上的链接访问他的网站。Referer其实应该是英文单词Referrer,不过拼错的人太多了,所以编写标准的人也就...
以前写过通过URLConnection下载图片等网络资源的代码,不过发现象新浪等网站,都不允许直接连接,所以增强了代码,通过模拟仿造referer来实现下载。
csrf绕过Referer技巧-01