`
steven_cheng
  • 浏览: 28259 次
  • 来自: 北京
社区版块
存档分类
最新评论

给Spring MVC增加一个referer View

    博客分类:
  • java
阅读更多

开发中很常见的一个用例,操作完成后返回操作页面。

用代码表示就是:

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";
	}
}

 

 

分享到:
评论
5 楼 ispring 2008-12-28  
Ahha, actually there are many people work with SpringMVC, it's a very excellent framework, maybe they dont agree with you that this is a very common requirement. They are more prefered to see your extention to do with EXCEL or PDF and so on
4 楼 DoubleEO 2008-12-26  
真不错,我用springmvc,不过还没想到你这里呢~呵呵
@RequestMapping("/test_test2.do")
是stripes框架吗?
3 楼 vdgame 2008-12-26  
steven_cheng 写道
这个...真的这么无聊,没有人感兴趣吗...

估计这里用springmvc的人不多
2 楼 shiren1118 2008-12-25  
hehe,确实没这么用过呢~很欣赏springmvc
Grails就是基于springmvc的
1 楼 steven_cheng 2008-12-25  
这个...真的这么无聊,没有人感兴趣吗...

相关推荐

    csrf绕过Referer技巧-01

    CSRF攻击是Web应用安全中一个常见的问题, Referer头可以用来防御CSRF攻击,但是攻击者可以通过绕过Referer技巧来欺骗服务器。因此,Web开发者需要采取多种防御措施来防御CSRF攻击,例如验证Token、双重验证、验证码...

    nginx利用referer指令实现防盗链配置

    在 `if` 语句中,如果 `$invalid_referer` 等于 1,则返回一个 403 错误给用户,用户会看到一个 403 页面。如果使用 `rewrite` 语句,盗链的图片会被重定向到 403.jpg。 通过命令行工具 `curl` 的示例可以看到,当 ...

    Android CordovaWebview Add Header Referer

    本代码是处理android hybrid混合应用,遇到的webview 拦截 header referer 问题的解决。 场景:angular $HTTP 或者js的http请求或者其他。。webview成功拦截get 、post、delete请求,添加header,referer以及body ...

    request.getHeader("referer")防盗链

    例如,如果你在A网站点击了一个链接跳转到B网站,B网站的服务器就能通过"Referer"头了解到用户是从A网站来的。这个信息对于分析用户行为、追踪流量来源等具有重要意义。 然而,"Referer"头同样可以被用来实施防盗链...

    Asp.Net MVC 图片防盗链(v_1.1.0)

    在Asp.Net MVC框架中,图片防盗链是一个重要的安全措施,尤其对于那些主要依赖图片内容的网站来说。图片防盗链技术的主要目的是防止未经授权的第三方站点通过URL直接引用或嵌入你的网站图片,从而节省带宽资源,保护...

    javascript操作referer详细解析

    JavaScript中的`referer`是一个关键的HTTP头部字段,它记录了用户从哪个URL访问了当前页面。这个信息对于网站分析、追踪用户来源以及了解流量来源至关重要。在JavaScript中,我们可以使用`document.referrer`来获取...

    C# MVC HttpModule 防盗链和图片304缓存

    如果`Referer`不是你的网站,你可以拒绝服务,返回一个错误页面或者一个空的图片。以下是一个简单的示例: ```csharp public class AntiHotlinkModule : IHttpModule { public void Init(HttpApplication context)...

    IE BHO插件,修改referer

    在本例中,我们关注的是一个特定的BHO插件,它的主要功能是修改HTTP请求头中的`Referer`字段。 `Referer`头字段是HTTP协议中的一部分,它包含了用户从哪个URL点击链接来到当前页面的信息。这对于网站分析用户来源、...

    如何增加Referer功能--反向链接插件

    ### 如何增加Referer功能——反向链接插件 #### 引言 在现代网络环境中,了解用户是如何访问您的网站是非常重要的。通过分析引荐来源(即referer信息),网站管理员可以更好地理解用户行为,优化推广策略,并提升...

    spring boot中英文语言切换

    下面将详细讲解如何在Spring Boot项目中搭建一个支持中英文切换的功能,以及如何结合jQuery在前端进行操作。 首先,我们需要在Spring Boot项目中引入i18n(国际化)的支持。这通常通过使用`spring-boot-starter-...

    HTTP Referer详解及Referer控制

    HTTP Referer是HTTP协议中的一个重要概念,主要用在Web服务器的请求头(header)中。当用户点击超链接从一个页面跳转到另一个页面时,浏览器会向目标服务器发送HTTP请求。在这个请求中,会包含一个名为“Referer”的...

    laravel-referer, 记住原始访问者引用者.zip

    laravel-referer, 记住原始访问者引用者 记得一个访问者引用者 在会话中记住访问者的原始引用者。 引用程序为( 优先优先级优先):utm_source 查询参数如果URL中存在外部主机,则来自请求头的Referer的域空白安装你...

    selenium-referer:在使用Python和WebDriver的Selenium测试中添加Referer请求标头的示例

    在我的用例中,我们的网站必须设置一个跟踪Cookie,该跟踪Cookie对于来自Google,AOL,Yahoo或MSN的用户将具有不同的值。 我必须测试在所有情况下都正确设置了cookie。 当我开始编写测试用例时,我发现没有在...

    基于Javascript的express-referer防盗链Node.js设计源码

    express-referer是一个基于Javascript开发的防盗链Node.js项目,包含520个文件,其中包括170个JavaScript文件、127个Markdown文件、87个JSON文件、19个TypeScript文件、17个ESLint配置文件、17个YAML文件、12个NYCrc...

    使用php伪造referer的方法 利用referer防止图片盗链

    HTTP Referer(通常拼写错误为Referrer)是HTTP头部的一个字段,当用户从一个网页点击链接跳转到另一个网页时,浏览器会将先前页面的URL作为Referer字段发送给新的网页服务器。这为服务器提供了用户是从哪个页面到达...

    springmvc 5.x 文件上传下载

    在Spring MVC 5.x框架中,文件上传和下载是常见的功能需求,对于Web应用程序来说尤其重要。本篇文章将深入探讨这些知识点,以便开发者能够更好地理解和实施相关操作。 ### 1. 单文件上传 在Spring MVC中,我们可以...

    Java 通过设置Referer反盗链

    当用户从一个外部链接访问网站资源时,浏览器通常会在请求头中携带`Referer`字段,表明是从哪个页面发起的请求。如果`Referer`不在允许的列表内,网站服务器就会拒绝提供资源。 Java中,我们可以利用`java.net....

    通过修改referer下载文件的方法

    为了避免这个问题,开发者需要在每次下载文件时都创建一个新的XmlHttp对象实例,确保每次请求都有独立的事件处理机制。 标签“referer 下载文件”进一步强调了操作的核心在于`Referer`头与文件下载的关联。 部分...

    ASP,PHP与.NET伪造HTTP-REFERER方法及防止伪造REFERER的方法

    这段代码首先创建了一个`MSXML2.XMLHTTP`对象,接着通过`setrequestheader`方法设置了Referer字段,最后发送请求。 #### PHP环境中的HTTP-REFERER伪造 PHP中伪造HTTP-REFERER同样有两种常见方式:使用cURL库和基于...

    laravel-referer:记住访问者的原始referer

    非常感谢您从家乡寄给我们一张明信片,其中提到您使用的是哪个包装。 您可以在上找到我们的地址。 我们将所有收到的明信片发布在。 安装 您可以通过composer安装该软件包: composer require spatie/laravel-...

Global site tag (gtag.js) - Google Analytics