- 浏览: 40626 次
- 性别:
- 来自: 上海
文章分类
最新评论
由于要做一个简单的SSO,所以学习了cookie部分,原来感觉Cookie很简单,无非就是将cookie写入response,再从request中读出来,作DEMO练习了一下,发现有好多细节得注意。
大体思路:写两个servlet,一个写入cookie,一个读出cookie,看到很多人用以下代码:
Java代码
1. response.addCookie(cookie);
2. javax.servlet.http.Cookie[] diskCookies = request.getCookies();
3. for(int i=0;i<diskCookies.length;i++){
4. Cookie cookie=diskCookies[i];
5. System.out.println( "cookie[0].getName()== "+cookie.getName());
6. System.out.println( "cookie[0].getValue()== "+cookie.getValue());
7. System.out.println( "cookie[0].getDomain() "+cookie.getDomain());
8.
9. }
response.addCookie(cookie);
javax.servlet.http.Cookie[] diskCookies = request.getCookies();
for(int i=0;i<diskCookies.length;i++){
Cookie cookie=diskCookies[i];
System.out.println( "cookie[0].getName()== "+cookie.getName());
System.out.println( "cookie[0].getValue()== "+cookie.getValue());
System.out.println( "cookie[0].getDomain() "+cookie.getDomain());
}
也就是在写入cookie后马上读取,进行测试,当然读不到,因为request内容没有刷新,要读到也是历史内容,所以还是使用 response.sendRedirect("ReadCookie");转到下一个servlet进行测试吧,另外,网上有简单的cookie查看工具,还蛮好用,在附件中可以下载。
好了,开始看代码:
1、写cookie的servlet
Java代码
1. package test;
2.
3. import java.io.IOException;
4.
5. import javax.servlet.ServletException;
6. import javax.servlet.http.Cookie;
7. import javax.servlet.http.HttpServlet;
8. import javax.servlet.http.HttpServletRequest;
9. import javax.servlet.http.HttpServletResponse;
10.
11. /*@author:duanqf*/
12. public class TestCookie extends HttpServlet {
13. protected void doGet(HttpServletRequest request,
14. HttpServletResponse response) throws ServletException, IOException {
15. // 如果不设置域,cookie不会写入
16. // 如果设为localhost也不会写入
17. // cookie.setDomain("localhost");
18. // 设置域为IP时,写入IP的域中,利用http://172.20.40.73:8088/SSOAuth/TestCookie访问可以读出
19. // 利用http://localhost:8088/SSOAuth/TestCookie访问读不出来。
20. Cookie cookie = new Cookie("duanqftest", "22222");
21. cookie.setDomain("172.20.40.73");
22. cookie.setMaxAge(60000);
23. cookie.setPath("/");
24. response.addCookie(cookie);
25. javax.servlet.http.Cookie[] diskCookies = request.getCookies();
26. response.sendRedirect("ReadCookie");
27.
28. }
29. }
package test;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/*@author:duanqf*/
public class TestCookie extends HttpServlet {
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
// 如果不设置域,cookie不会写入
// 如果设为localhost也不会写入
// cookie.setDomain("localhost");
// 设置域为IP时,写入IP的域中,利用http://172.20.40.73:8088/SSOAuth/TestCookie访问可以读出
// 利用http://localhost:8088/SSOAuth/TestCookie访问读不出来。
Cookie cookie = new Cookie("duanqftest", "22222");
cookie.setDomain("172.20.40.73");
cookie.setMaxAge(60000);
cookie.setPath("/");
response.addCookie(cookie);
javax.servlet.http.Cookie[] diskCookies = request.getCookies();
response.sendRedirect("ReadCookie");
}
}
2、读出cookie的代码
Java代码
1. package test;
2.
3. import javax.servlet.http.Cookie;
4. import javax.servlet.http.HttpServlet;
5. import javax.servlet.http.HttpServletRequest;
6. import javax.servlet.http.HttpServletResponse;
7.
8. /*@author:duanqf*/
9. public class ReadCookie extends HttpServlet{
10. protected void doGet(HttpServletRequest request, HttpServletResponse response){
11. javax.servlet.http.Cookie[] diskCookies = request.getCookies();
12. for(int i=0;i<diskCookies.length;i++){
13. Cookie cookie=diskCookies[i];
14. System.out.println( "cookie[0].getName()== "+cookie.getName());
15. System.out.println( "cookie[0].getValue()== "+cookie.getValue());
16. System.out.println( "cookie[0].getDomain() "+cookie.getDomain());
17.
18. }
19. }
20. }
package test;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/*@author:duanqf*/
public class ReadCookie extends HttpServlet{
protected void doGet(HttpServletRequest request, HttpServletResponse response){
javax.servlet.http.Cookie[] diskCookies = request.getCookies();
for(int i=0;i<diskCookies.length;i++){
Cookie cookie=diskCookies[i];
System.out.println( "cookie[0].getName()== "+cookie.getName());
System.out.println( "cookie[0].getValue()== "+cookie.getValue());
System.out.println( "cookie[0].getDomain() "+cookie.getDomain());
}
}
}
javax.servlet.http.Cookie有两个比较重要的方法:setDomain()、setPath()
正常的cookie只能在一个应用中共享,即一个cookie只能由创建它的应用获得。
1.可在同一应用服务器内共享方法:设置cookie.setPath("/");
本机tomcat/webapp下面有两个应用:webapp_a和webapp_b,
1)原来在webapp_a下面设置的cookie,在webapp_b下面获取不到,path默认是产生cookie的应用的路径。
2)若在webapp_a下面设置cookie的时候,增加一条cookie.setPath("/");或者cookie.setPath("/webapp_b/");
就可以在webapp_b下面获取到cas设置的cookie了。
3)此处的参数,是相对于应用服务器存放应用的文件夹的根目录而言的(比如tomcat下面的webapp),因此 cookie.setPath("/");之后,可以在webapp文件夹下的所有应用共享cookie,而cookie.setPath(" /webapp_b/");
是指cas应用设置的cookie只能在webapp_b应用下的获得,即便是产生这个cookie的webapp_a应用也不可以。
4)设置cookie.setPath("/webapp_b/jsp")或者cookie.setPath("/webapp_b /jsp/")的时候,只有在webapp_b/jsp下面可以获得cookie,在webapp_b下面但是在jsp文件夹外的都不能获得 cookie。
5)设置cookie.setPath("/webapp_b");,是指在webapp_b下面才可以使用cookie,这样就不可以在产生cookie的应用webapp_a下面获取cookie了
6)有多条cookie.setPath("XXX");语句的时候,起作用的以最后一条为准。
2.跨域共享cookie的方法:设置cookie.setDomain(".jszx.com");
A机所在的域:home.langchao.com,A有应用webapp_a
B机所在的域:jszx.com,B有应用webapp_b
1)在webapp_a下面设置cookie的时候,增加cookie.setDomain(".jszx.com");,这样在webapp_b下面就可以取到cookie。
2)输入url访问webapp_b的时候,必须输入域名才能解析。比如说在A机器输入:http://lc-bsp.jszx.com:8080/webapp_b,可以获取webapp_a在客户端设置的cookie,而B机器访问本机的应用,输入:http://localhost:8080/webapp_b则不可以获得cookie。
3)设置了cookie.setDomain(".jszx.com");,还可以在默认的home.langchao.com下面共享
疑问: 为什么我写cookie设置的城都是localhost,URL里也用localhost, 但是cookie写不进去??当然,也读不出来了。测试环境TOMCAT5.5 IE6.0
大体思路:写两个servlet,一个写入cookie,一个读出cookie,看到很多人用以下代码:
Java代码
1. response.addCookie(cookie);
2. javax.servlet.http.Cookie[] diskCookies = request.getCookies();
3. for(int i=0;i<diskCookies.length;i++){
4. Cookie cookie=diskCookies[i];
5. System.out.println( "cookie[0].getName()== "+cookie.getName());
6. System.out.println( "cookie[0].getValue()== "+cookie.getValue());
7. System.out.println( "cookie[0].getDomain() "+cookie.getDomain());
8.
9. }
response.addCookie(cookie);
javax.servlet.http.Cookie[] diskCookies = request.getCookies();
for(int i=0;i<diskCookies.length;i++){
Cookie cookie=diskCookies[i];
System.out.println( "cookie[0].getName()== "+cookie.getName());
System.out.println( "cookie[0].getValue()== "+cookie.getValue());
System.out.println( "cookie[0].getDomain() "+cookie.getDomain());
}
也就是在写入cookie后马上读取,进行测试,当然读不到,因为request内容没有刷新,要读到也是历史内容,所以还是使用 response.sendRedirect("ReadCookie");转到下一个servlet进行测试吧,另外,网上有简单的cookie查看工具,还蛮好用,在附件中可以下载。
好了,开始看代码:
1、写cookie的servlet
Java代码
1. package test;
2.
3. import java.io.IOException;
4.
5. import javax.servlet.ServletException;
6. import javax.servlet.http.Cookie;
7. import javax.servlet.http.HttpServlet;
8. import javax.servlet.http.HttpServletRequest;
9. import javax.servlet.http.HttpServletResponse;
10.
11. /*@author:duanqf*/
12. public class TestCookie extends HttpServlet {
13. protected void doGet(HttpServletRequest request,
14. HttpServletResponse response) throws ServletException, IOException {
15. // 如果不设置域,cookie不会写入
16. // 如果设为localhost也不会写入
17. // cookie.setDomain("localhost");
18. // 设置域为IP时,写入IP的域中,利用http://172.20.40.73:8088/SSOAuth/TestCookie访问可以读出
19. // 利用http://localhost:8088/SSOAuth/TestCookie访问读不出来。
20. Cookie cookie = new Cookie("duanqftest", "22222");
21. cookie.setDomain("172.20.40.73");
22. cookie.setMaxAge(60000);
23. cookie.setPath("/");
24. response.addCookie(cookie);
25. javax.servlet.http.Cookie[] diskCookies = request.getCookies();
26. response.sendRedirect("ReadCookie");
27.
28. }
29. }
package test;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/*@author:duanqf*/
public class TestCookie extends HttpServlet {
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
// 如果不设置域,cookie不会写入
// 如果设为localhost也不会写入
// cookie.setDomain("localhost");
// 设置域为IP时,写入IP的域中,利用http://172.20.40.73:8088/SSOAuth/TestCookie访问可以读出
// 利用http://localhost:8088/SSOAuth/TestCookie访问读不出来。
Cookie cookie = new Cookie("duanqftest", "22222");
cookie.setDomain("172.20.40.73");
cookie.setMaxAge(60000);
cookie.setPath("/");
response.addCookie(cookie);
javax.servlet.http.Cookie[] diskCookies = request.getCookies();
response.sendRedirect("ReadCookie");
}
}
2、读出cookie的代码
Java代码
1. package test;
2.
3. import javax.servlet.http.Cookie;
4. import javax.servlet.http.HttpServlet;
5. import javax.servlet.http.HttpServletRequest;
6. import javax.servlet.http.HttpServletResponse;
7.
8. /*@author:duanqf*/
9. public class ReadCookie extends HttpServlet{
10. protected void doGet(HttpServletRequest request, HttpServletResponse response){
11. javax.servlet.http.Cookie[] diskCookies = request.getCookies();
12. for(int i=0;i<diskCookies.length;i++){
13. Cookie cookie=diskCookies[i];
14. System.out.println( "cookie[0].getName()== "+cookie.getName());
15. System.out.println( "cookie[0].getValue()== "+cookie.getValue());
16. System.out.println( "cookie[0].getDomain() "+cookie.getDomain());
17.
18. }
19. }
20. }
package test;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/*@author:duanqf*/
public class ReadCookie extends HttpServlet{
protected void doGet(HttpServletRequest request, HttpServletResponse response){
javax.servlet.http.Cookie[] diskCookies = request.getCookies();
for(int i=0;i<diskCookies.length;i++){
Cookie cookie=diskCookies[i];
System.out.println( "cookie[0].getName()== "+cookie.getName());
System.out.println( "cookie[0].getValue()== "+cookie.getValue());
System.out.println( "cookie[0].getDomain() "+cookie.getDomain());
}
}
}
javax.servlet.http.Cookie有两个比较重要的方法:setDomain()、setPath()
正常的cookie只能在一个应用中共享,即一个cookie只能由创建它的应用获得。
1.可在同一应用服务器内共享方法:设置cookie.setPath("/");
本机tomcat/webapp下面有两个应用:webapp_a和webapp_b,
1)原来在webapp_a下面设置的cookie,在webapp_b下面获取不到,path默认是产生cookie的应用的路径。
2)若在webapp_a下面设置cookie的时候,增加一条cookie.setPath("/");或者cookie.setPath("/webapp_b/");
就可以在webapp_b下面获取到cas设置的cookie了。
3)此处的参数,是相对于应用服务器存放应用的文件夹的根目录而言的(比如tomcat下面的webapp),因此 cookie.setPath("/");之后,可以在webapp文件夹下的所有应用共享cookie,而cookie.setPath(" /webapp_b/");
是指cas应用设置的cookie只能在webapp_b应用下的获得,即便是产生这个cookie的webapp_a应用也不可以。
4)设置cookie.setPath("/webapp_b/jsp")或者cookie.setPath("/webapp_b /jsp/")的时候,只有在webapp_b/jsp下面可以获得cookie,在webapp_b下面但是在jsp文件夹外的都不能获得 cookie。
5)设置cookie.setPath("/webapp_b");,是指在webapp_b下面才可以使用cookie,这样就不可以在产生cookie的应用webapp_a下面获取cookie了
6)有多条cookie.setPath("XXX");语句的时候,起作用的以最后一条为准。
2.跨域共享cookie的方法:设置cookie.setDomain(".jszx.com");
A机所在的域:home.langchao.com,A有应用webapp_a
B机所在的域:jszx.com,B有应用webapp_b
1)在webapp_a下面设置cookie的时候,增加cookie.setDomain(".jszx.com");,这样在webapp_b下面就可以取到cookie。
2)输入url访问webapp_b的时候,必须输入域名才能解析。比如说在A机器输入:http://lc-bsp.jszx.com:8080/webapp_b,可以获取webapp_a在客户端设置的cookie,而B机器访问本机的应用,输入:http://localhost:8080/webapp_b则不可以获得cookie。
3)设置了cookie.setDomain(".jszx.com");,还可以在默认的home.langchao.com下面共享
疑问: 为什么我写cookie设置的城都是localhost,URL里也用localhost, 但是cookie写不进去??当然,也读不出来了。测试环境TOMCAT5.5 IE6.0
发表评论
-
深入探讨 Java 类加载器
2011-10-24 14:25 655http://www.ibm.com/developerwor ... -
firefox不识别“../../”的相对路径的问题
2011-09-07 15:59 2173在使用dojo时,想要完全不用tomca跑动dojo应用(加载 ... -
java乱码终结
2011-07-11 17:10 770http://www.ibm.com/developerwor ... -
Servlet线程,工作原理及3.0新特性
2011-06-17 11:05 2839servlet3.0新特性http://www.i ... -
全面分析Java的垃圾回收机制(转)
2011-03-31 10:55 691引言 Java的堆是 ... -
深入Java核心 Java内存分配原理精讲(转)
2011-03-31 10:48 623Java 内存 分配 ... -
Integer.parseInt(s) 和 Integer.valueOf(s)详细区别(转)
2011-01-26 14:07 3827今天在看jdk的源代码的时候注意到Integer.parseI ... -
转发与重定向的路径问题(转)
2010-12-12 14:08 1398重定向是客户端跳转,转发是服务器端跳转 在servlet中 ... -
The "Double-Checked Locking is Broken" Declaration
2010-12-05 09:19 736http://www.cs.umd.edu/~pugh/jav ... -
Java 理论与实践: 正确使用 Volatile 变量
2010-12-05 09:18 758http://www.ibm.com/developerwor ... -
读取Properties文件读取,路径,空格,中文问题
2010-12-04 19:00 2334读取Properties文件读取,路径,空格,中文问题读取Pr ... -
使用了request.setCharacterEncoding()方法却解决不了中文乱码原因(转载)
2010-11-28 10:28 2193使用了request.setCharacterEncoding ... -
隐式对象简介(转载)
2010-11-27 22:13 813隐式对象简介 JSP 架构 ... -
转发与重定向
2010-11-25 16:02 981Java代码 1. response.sendRedi ...
相关推荐
博文链接:https://qingfeng825.iteye.com/blog/142268
博文链接:https://qingfeng825.iteye.com/blog/182494
by Qingfeng Xia http://www.iesensor.com • 2015-09-18 version 0.1 for FreeCAD version 0.16-dev • 2016-09-18 version 0.2 for FreeCAD version 0.17-dev License of this book This ebook is licensed the ...
elementui表单校验二次封装包
HLK-UART-WIFI is a WLAN Module based on UART Serial from Hi-Link. 1.1. Main Function ...本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/qingfeng12g/archive/2010/03/07/5354341.aspx
蓝牙BLE WinForm示例程序(可执行文件),使用HC-42低功耗蓝牙模块BLE5.0连接成功,且收发数据正常,可用于简单的BLE蓝牙调试,支持Hex和字符串类型...https://blog.csdn.net/qingfeng_hero/article/details/120995069
#### 2.4.1 定义数据访问层 创建Repository接口继承JpaRepository,实现基本的CRUD操作: ```java public interface UserRepository extends JpaRepository, Long> { } ``` #### 2.4.2 配置数据源路由策略 为了实现...
纯64位一键恢复CGI64 v3.2,支持GHO/WIM/SWM,支持GPT/动态磁盘(2014.02.09) 单文件版 内置的IMAGEX版本为6.3.9600.17029 注:此版本的IMAGEX无法在NT5平台中运行,其实从WIN8.1正式版就这样了,这是微软要搞死XP...
原生JS写的无限级树形菜单(包含文件:otree.js,otree.css,demo.html,demo1.html,imgs/ ),兼容IE6/7/8/9+、Chrome、Firefox、Opera、Safari等主流浏览器,以及360/搜狗等其他各浏览器。 可动态添加/删除节点,启用/...
在这个例子中,当用户访问"/example"路径时,Struts将调用`com.example.ExampleAction`类来处理请求,如果处理成功,它会将控制权转发到`/jsp/success.jsp`页面。 2. **数据源配置**:Struts框架允许我们在XML配置...
在网页开发中,多级联动下拉列表是一种常见的交互元素,尤其在处理地理位置选择或层级分类时非常实用。本文将详细介绍如何使用原生JavaScript实现一个可自定义级数的多级联动下拉列表,以及如何根据提供的"demo"文件...
英文引用:ZHANG Chiming,WANG Qingfeng,LIU Zhiqin,et al. Diagnostic method of frequently occurring chest diseases based on deep leaning[J]. Computer Engineering,2020,46(7):306-311,320. 这种深度...
青锋Cloud+VUE前后端分离后台管理系统,后端采用:SpringCloud+Alibaba+Nacas+OAuth2Jwt+Gateway+skywalking+Feign+Spring Boot Admin等技术;前端采用VUE+ant design。整合了菜单功能权限、数据权限、代码生成器、...
首先,执行以下命令来安装项目依赖:pnpm install接着,进行编译和热重载以进行开发:pnpm dev要进行生产环境的类型检查、编译和压缩,请执行以下命令:pnpm build单元测试可以通过Vitest来运行,命令如下:pnpm ...
在JavaScript中,没有内置的`String.Format`函数,如C#中那样,它提供了一种方便的方式来格式化字符串。然而,由于JavaScript的灵活性,我们可以创建一个类似的函数来实现这一功能。`String.Format`的主要作用是将...
qingfeng_3.2.2_zouqi02_release_322_jiagu_sign_sign_1228 (1).apk