开发中很常见的一个用例,操作完成后返回操作页面。
用代码表示就是:
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";
}
}
分享到:
相关推荐
CSRF攻击是Web应用安全中一个常见的问题, Referer头可以用来防御CSRF攻击,但是攻击者可以通过绕过Referer技巧来欺骗服务器。因此,Web开发者需要采取多种防御措施来防御CSRF攻击,例如验证Token、双重验证、验证码...
在 `if` 语句中,如果 `$invalid_referer` 等于 1,则返回一个 403 错误给用户,用户会看到一个 403 页面。如果使用 `rewrite` 语句,盗链的图片会被重定向到 403.jpg。 通过命令行工具 `curl` 的示例可以看到,当 ...
本代码是处理android hybrid混合应用,遇到的webview 拦截 header referer 问题的解决。 场景:angular $HTTP 或者js的http请求或者其他。。webview成功拦截get 、post、delete请求,添加header,referer以及body ...
例如,如果你在A网站点击了一个链接跳转到B网站,B网站的服务器就能通过"Referer"头了解到用户是从A网站来的。这个信息对于分析用户行为、追踪流量来源等具有重要意义。 然而,"Referer"头同样可以被用来实施防盗链...
在Asp.Net MVC框架中,图片防盗链是一个重要的安全措施,尤其对于那些主要依赖图片内容的网站来说。图片防盗链技术的主要目的是防止未经授权的第三方站点通过URL直接引用或嵌入你的网站图片,从而节省带宽资源,保护...
JavaScript中的`referer`是一个关键的HTTP头部字段,它记录了用户从哪个URL访问了当前页面。这个信息对于网站分析、追踪用户来源以及了解流量来源至关重要。在JavaScript中,我们可以使用`document.referrer`来获取...
如果`Referer`不是你的网站,你可以拒绝服务,返回一个错误页面或者一个空的图片。以下是一个简单的示例: ```csharp public class AntiHotlinkModule : IHttpModule { public void Init(HttpApplication context)...
在本例中,我们关注的是一个特定的BHO插件,它的主要功能是修改HTTP请求头中的`Referer`字段。 `Referer`头字段是HTTP协议中的一部分,它包含了用户从哪个URL点击链接来到当前页面的信息。这对于网站分析用户来源、...
### 如何增加Referer功能——反向链接插件 #### 引言 在现代网络环境中,了解用户是如何访问您的网站是非常重要的。通过分析引荐来源(即referer信息),网站管理员可以更好地理解用户行为,优化推广策略,并提升...
下面将详细讲解如何在Spring Boot项目中搭建一个支持中英文切换的功能,以及如何结合jQuery在前端进行操作。 首先,我们需要在Spring Boot项目中引入i18n(国际化)的支持。这通常通过使用`spring-boot-starter-...
HTTP Referer是HTTP协议中的一个重要概念,主要用在Web服务器的请求头(header)中。当用户点击超链接从一个页面跳转到另一个页面时,浏览器会向目标服务器发送HTTP请求。在这个请求中,会包含一个名为“Referer”的...
laravel-referer, 记住原始访问者引用者 记得一个访问者引用者 在会话中记住访问者的原始引用者。 引用程序为( 优先优先级优先):utm_source 查询参数如果URL中存在外部主机,则来自请求头的Referer的域空白安装你...
在我的用例中,我们的网站必须设置一个跟踪Cookie,该跟踪Cookie对于来自Google,AOL,Yahoo或MSN的用户将具有不同的值。 我必须测试在所有情况下都正确设置了cookie。 当我开始编写测试用例时,我发现没有在...
express-referer是一个基于Javascript开发的防盗链Node.js项目,包含520个文件,其中包括170个JavaScript文件、127个Markdown文件、87个JSON文件、19个TypeScript文件、17个ESLint配置文件、17个YAML文件、12个NYCrc...
HTTP Referer(通常拼写错误为Referrer)是HTTP头部的一个字段,当用户从一个网页点击链接跳转到另一个网页时,浏览器会将先前页面的URL作为Referer字段发送给新的网页服务器。这为服务器提供了用户是从哪个页面到达...
在Spring MVC 5.x框架中,文件上传和下载是常见的功能需求,对于Web应用程序来说尤其重要。本篇文章将深入探讨这些知识点,以便开发者能够更好地理解和实施相关操作。 ### 1. 单文件上传 在Spring MVC中,我们可以...
当用户从一个外部链接访问网站资源时,浏览器通常会在请求头中携带`Referer`字段,表明是从哪个页面发起的请求。如果`Referer`不在允许的列表内,网站服务器就会拒绝提供资源。 Java中,我们可以利用`java.net....
为了避免这个问题,开发者需要在每次下载文件时都创建一个新的XmlHttp对象实例,确保每次请求都有独立的事件处理机制。 标签“referer 下载文件”进一步强调了操作的核心在于`Referer`头与文件下载的关联。 部分...
这段代码首先创建了一个`MSXML2.XMLHTTP`对象,接着通过`setrequestheader`方法设置了Referer字段,最后发送请求。 #### PHP环境中的HTTP-REFERER伪造 PHP中伪造HTTP-REFERER同样有两种常见方式:使用cURL库和基于...
非常感谢您从家乡寄给我们一张明信片,其中提到您使用的是哪个包装。 您可以在上找到我们的地址。 我们将所有收到的明信片发布在。 安装 您可以通过composer安装该软件包: composer require spatie/laravel-...