`
jobar
  • 浏览: 341341 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

如何利用Spring的redirectStrategy进行url hash tag的重定向

 
阅读更多
我们都知道url的hash部分是不能传到服务器端的,例如 http://projectname/#M_FACTORY:ci,其中url里面的“#M_FACTORY:ci”是hash部分,在前台可以用location.hash取得,在传到后台的时候这部分是被忽略掉的。如果我们想实现登录后自动跳转到这个url,普通的重定向是没法实现的。

1. 配置Spring登录成功的重定向策略
主意这里不能使用always-use-default-target="true",不然无法重定向
<security:http>
<security:form-login login-page="/login.action" default-target-url="/index.html" authentication-success-handler-ref="successHandler"
			authentication-failure-url="/loginfailed.action" />
</security:http>

2. 配置targetUrlParameter参数和重定向策略
如果这个参数设置后,当前的请求会对含有这个参数名的URL进行检查,然后将其对应的值作为转向的目标url
<bean id="successHandler" class="org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler">
		<property name="targetUrlParameter" value="redirect"></property>
		<property name="redirectStrategy">
			<bean class="xxx.MyRedirectStrategy"></bean>
		</property>
	</bean>

3. 自定义重定向策略
public class MyRedirectStrategy extends DefaultRedirectStrategy {
    @Override
    public void sendRedirect(final HttpServletRequest request, final HttpServletResponse response, final String url)
            throws IOException {
        if (url != null && !url.startsWith("/") && !url.startsWith("http://")) {
            final String redirectUrl = request.getContextPath() + "/index.html#" + url;
            response.sendRedirect(redirectUrl);
        } else {
            super.sendRedirect(request, response, url);
        }
    }
}

4. UI端做响应的处理
<form name='f' action='j_spring_security_check' method="post" onsubmit="return setSubmitUrl(this);">
	function setSubmitUrl(form){
		var action = form.action;
		var hash = location.hash;
		if(hash){
			hash = hash.substring(1);
			action += "?redirect=" + hash;
		}
		form.action = action;
		return true;
	}

这里将hash值转换为参数就可以传送到后台,登录成功可以在改写成跳转到的hash url,这样就实现了用户的需求,达到了我们的目标。

注意这里的“redirect要与spring配置文件里面的targetUrlParameter参数值要一致
分享到:
评论

相关推荐

    Nginx如何配置url_hash转发方式.docx

    Nginx如何配置url_hash转发方式.docx

    Nginx安装url_hash插件.doc

    url_hash 是nginx的第三方模块,nginx本身不支持,需要打patch . Url_hash 你nginx在做负载均衡的时候。把转发的URL 以hash的形式保存。这样可以保证同一个URL始终 分给同一个real server,来提高访问速度。

    UrlHash/锚点

    使用《UrlHash/锚点》解决移动设备中的单页面应用的物理[返回键]带来的困扰 示例代码

    url-hash:为防篡改 url 添加哈希参数的节点库

    基本用法将哈希添加到 url // require libraryvar urlHash = require ( 'url-hash' ) ;var url = 'http://www.example.com/page?id=4' ;// add hash to urlvar newUrl = urlHash . create ( url ) ;验证网址 // ...

    图片服务器的url hash架构.docx

    图片服务器的url hash架构.docx

    Nginx_upstream_hash-0.3.1.tar.gz

    Nginx upstream urlhash url hash 反向代理 Nginx upstream urlhash url hash 反向代理

    Hash函数与消息认证

    hash函数与消息认证讲义 包括 5.1 Hash函数概述 5.1.1 Hash函数定义 5.1.2 Hash函数的安全性 5.1.3 Hash函数的迭代构造法 5.2 Hash函数MD5 5.2.1 MD5算法 5.2.2 MD5的安全性 5.3 安全Hash算法SHA-1 5.3.1 SHA-1...

    利用Hash技术统计C源程序中关键字的频度

    设Hash函数为:Hash(Key)=[(Key的首字母序号)*100+(Key的尾字母序号)] Mod 41。关键字39个,参考C语言教材。 二、数据结构设计 ①关键字表的存储结构;②Hash表中的结点结构。频度、冲突次数 三、功能设计 ①从一个...

    利用Hash技术统计C源程序中关键字

    利用Hash技术统计C源程序中关键字的频度:扫描一个C源程序,用Hash表存储该程序中出现的关键字,并统计该程序中的关键字出现的度。用线性探测法解决Hash冲突。设Hash函数为:Hash(Key)=[(Key的首字母序号)*100+(Key...

    react-hash:React自定义钩子以从URL获取哈希

    React自定义钩子以从URL获取哈希值。 目录 安装 npm: npm install react-hash 纱: yarn add react-hash 用法 import React from 'react' ; import { useHash } from 'react-hash' ; const App = ( ) =&gt; { ...

    Python实现短网址ShortUrl的Hash运算实例讲解

    以下要实现的是不用数据库支持就对原始URL进行shorturl hash。说到这里我们很容易想到MD5,固定长度,冲突概率小,但是32个字符,太长?我们以MD5为基础,将其字符缩短,同时要保证一定数量范围内hash不会冲突。 ...

    文件hash算法,对大文件进行hash计算

    文件hash算法,对大文件进行hash计算,并可以返回base64编码.文件hash算法,对大文件进行hash计算,并可以返回base64编码.

    数据库2021第5次作业答案1

    1、利用可扩展 hash 方法对以下记录进行 hash 存储: 2、利用可扩展 hash 方法对以下记录进行 hash 存储: 3、已知有如下 b+树:

    图片服务器的hash架构剖析

    url hash架构对url进行一次hash算法,然后通过hash结果找到对应的服务器。因为针对单一个url的hash结果是一样的,所以理论上这个url会被永久分配到固定的一台服务器上。另外因为经过了hash算法,所以分配url就很均匀...

    高运算性能,低碰撞率的hash算法MurmurHash算法.zip

    MurmurHash算法由Austin Appleby创建于2008年,现已应用到Hadoop、libstdc 、nginx、libmemcached,Redis,Memcached,Cassandra,HBase,Lucene等开源系统。2011年Appleby被Google雇佣,随后Google推出其变种的...

    uthash开源的hash函数实现

    uthash开源的hash函数实现,里面的uthash.h可用

    hashcat-6.2.6(hash爆破工具)

    内容描述:用于crypto中hash爆破的强大工具。 优势:相较于其他hash工具,具有更快的算力,使用方便简洁。 适用:适用于md5,sha256等典型hash加密方式,反推出所需的源码。

    C开源hash代码uthash

    uthash 是C的比较优秀的开源代码,它实现了常见的hash操作函数,例如查找、插入、删除等待。该套开源代码采用宏的方式实现hash函数的相关功能,支持C语言的任意数据结构最为key值,甚至可以采用多个值作为key,无论...

    各种Hash函数(JAVA版)

    RS-Hash Function Value: " + ghl.RSHash(key)); System.out.println(" 2. JS-Hash Function Value: " + ghl.JSHash(key)); System.out.println(" 3. PJW-Hash Function Value: " + ghl.PJWHash(key)); System....

    mysql_hash.exe/使用hash登陆mysql

    在获取到mysql用户的hash后, 可用hash直接登陆mysql进行操作 比如我们注入出数据库的hash,但是没办法拿到webshell 我们可以使用mysql_hash,用hash登陆并控制数据库 使用方法: mysql_hash.exe -u root -p Enter ...

Global site tag (gtag.js) - Google Analytics