继续介绍「单点登录与权限管理」系列的第一部分:单点登录与权限管理本质,本篇说说HTTP重定向,它也是完成单点登录的基础知识。
该系列的完整写作计划,可见文章:系列概述
单点登录需要在多个web项目之间相互跳转,使用重定向技术,自动完成登录操作。另外,当实际资源被迁移到其他URL时,可使用重定向技术,将访问原有URL的请求,自动跳转到新URL,保持原有URL有效。
本篇主要从以下几个方面介绍:
- 重定向基本概念
- Nginx重定向
- Servlet重定向
- Spring使用重定向
基本概念
基本原理
在HTTP协议中,服务器通过发送特定的响应实现重定向,浏览器在接收到响应后,可根据状态码判定重定向,并使用指定的新URL重新请求。重定向的响应状态码为3xx,不同的状态码表示不同的重定向类型。
浏览器从响应头中的Location获取新的URL,重新发送请求。
重定向类型
重定向类型包括永久重定向、临时重定向、特殊重定向,不同的重定向类型,一方面会影响浏览器的操作,一方面会影响搜索引擎的收录。
永久重定向,是指原URL不再被使用,应优先选择新的URL,搜索引擎机器人会在遇到该状态码时,触发更新操作,使用新的URL。常见的状态码有301,Moved Permanently。
临时重定向,如果请求的资源临时不可用,但可从其他地方访问。搜索引擎不会记录该临时的链接。常见的状态码有302 Found,307 Temporary Redirect。
特殊重定向,304 Not Modified 资源未被修改,会从本地缓存中获取网页;300 Multiple Choice,是一种手工重定向,用户可选择重定向的页面。
设置重定向方法
除了上面介绍的重定向方法,还可以通过HTML的metay元素,或者JS实现重定向,但还是建议优先选择上面介绍方法。
<head>
<meta http-equiv="refresh" content="0;URL=https://www.mi.com" />
</head>
content属性值,第一个数字表示等待多少秒后进行跳转。
window.location = "https://www.mi.com";
Nginx重定向
rewrite
nginx的rewrite主要功能就是实现URL的重定向,其语法规则如下:
rewrite <regex> <replacement> [flag]
regex 正则匹配需要重定向的url
replacement 替换内容,将正则匹配的内容替换成replacement
flag 标记,具体如下:
- last:本条规则匹配之后,继续向下匹配新的rewrite;
- break:本条规则匹配完成即终止,后面的规则不再匹配;
- redirect:返回302临时重定向;
- permanent:返回301永久重定向;
rewirte参数的标签段位置:server,location,if
rewrite示例
将 mi.com 重定向 www.mi.com
server {
listen 80;
server_name mi.com;
rewrite ^/(.*) http://www.mi.com/$1 permanent;
}
return
可通过return直接重定向,如下:
server {
listen 80;
server_name example.com;
return 301 $scheme://www.mi.com$request_uri;
}
Servlet重定向
首先要区分开转发和重定向的概念,转发是在服务端完成的,浏览器地址栏中的地址不会改变,是一次请求;重定向是在浏览器端完成的,浏览器地址栏会变化,是二次请求。
无论是转发还是重定向,在执行方法前,不要向客户端输出内容.
转发
public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException {
response.setContentType("text/html; charset=utf-8");
ServletContext sc = getServletContext();
RequestDispatcher dispatcher = null;
dispatcher = sc.getRequestDispatcher("index.jsp");
dispatcher.forward(request, response);
}
重定向
public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException {
response.setContentType("text/html; charset=utf-8");
response.sendRedirect("/index.jsp");
}
Spring使用重定向
不带参数
return new ModelAndView("redirect:/toList");
return "redirect:/toList";
带参数
public String test(RedirectAttributes attributes)
{
attributes.addAttribute("hello", "hello");
return "redirect:/toList";
}
这样会在重定向后的url中自动追加参数。
Spring MVC 3.1 版本添加了一个新特性,Flash属性,可以实现传递参数,并且可以解决重复提交的问题。
一个正常的Controller处理时,处理完成之后,会被forward到一个操作成功的页面,如果用户按F5,就会再次提交一遍,如果使用redirect,就可以避免这个问题。
public String test(RedirectAttributes attributes) {
attributes.addFlashAttribute("hello", "hello");
return "redirect:/toList";
}
相关推荐
项目3 Linux磁盘文件管理 第三讲 主要内容 Linux操作命令 Linux目录管理 Linux文件管理 拓展:管道和重定向 Linux文件系统 系统及其他命令 vi编辑器 磁盘分区管理 拓展:重定向 输出重定向 功能:将一个命令的输出...
Jeecg配置单点登录 登录验证完整代码
使用std :: streambuf将内容写到测试记录器中,然后替换为std :: clog
ncc单点登录重定向单据代码
重定向啊啊重定向啊啊重定向啊啊重定向啊啊重定向啊啊重定向啊啊重定向啊啊重定向啊啊重定向啊啊重定向啊啊重定向啊啊重定向啊啊重定向啊啊重定向啊啊重定向啊啊重定向啊啊重定向啊啊重定向啊啊重定向啊啊重定向啊啊...
MirrorCache:下载重定向器
本人亲自试验的cas单点登录配置,服务端用cas-server-3.5.2,客户端用cas-client-3.2.1,里边详细描述了具体每一步的配置过程及遇到的问题及异常,相信你也会碰到的,cas-client-3.2.1中需要修改一个java类的源代码...
钉钉扫码登录讲解 一、扫码登录参数准备 ①、首先我们进入钉钉开放平台 https://ding-doc.dingtalk.com/ ②、选择《第三方企业应用》查看名词解释,并充分理解钉钉登录有关的关键词 AppId 应用唯一标识 AppSecret ...
文中详细介绍了关于http重定向的相关实现以及在网络中的应用案例
http_client 具有重定向处理功能的 vertx 3 http 客户端private void test() {// settingsString url = " http://t.co/Oj3GYaGzER " ;int maxRedirectsCount = 5 ;HttpClient client = vertx . createHttpClient();/...
Linux下对任意Http请求重定向.pdf
允许您在客户登录,注销并创建新帐户后重定向到自定义页面。(禁止用作商业用途)
SSO 单点登录(Single Sign On)的简称, SSO是目前比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。
USerLogin servlet 登录实例探究转发与重定向本质区别
jQuery的简单HTTP POST和GET重定向插件 易于使用 GET和POST请求 与jQuery,jQlite和Zepto.js兼容 支持嵌套对象和数组 它是如何工作的? jQuery.redirect函数将创建一个表单,并使用数据填充它(它支持嵌套值)。 ...
cgi + http + 重定向
请求转发与重定向
重定向器将帖子,页面或任何自定义帖子类型重定向到其他网址。安装将插件文件放在插件目录中,并在WP后端中将其激活。 前往编辑页面向下滚动到“重定向器”元框选择您要安装的WordPress页面或输入有效的URL或选择...
单点登录大致流程: 第一步:用户访问第三方系统。第三方根据局部会话判断用户是否登录此系统,没有登录,则重定向到认证系统去进行认证操作。 第二步:重定向到认证系统,根据全局会话判断用户是否登录,未登录则...
吉拉重定向 该项目使用GitHub Pages将地址重定向到 。