weixin_42301735 2009-03-23 10:41
浏览 622
已采纳

在Filter中访问Cookie的问题

我想做自动登录。
在用户登录的Servlet里已经将相关信息保存至cookie了,磁盘上也确实有。但是在Filter里查找cookie时,却发现只能找到名字为JSESSIONID的cookie,而我保存的名字叫name的cookie却找不到。我在用户登录的Servlet里也写了读取Cookie的代码,运行时一切正常。
我的doFilter()方法的开头部分如下:
public void doFilter(ServletRequest req, ServletResponse resp,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) resp;
Cookie[] cookies = request.getCookies();
System.out.println("Enter AdminAutoLoginFilter");
System.out.println("cookies is null? " + (cookies == null));
if (cookies != null) {
for (int i = 0; i < cookies.length; i++) {
System.out.println("cookies[" + i + "].getName() :"
+ cookies[i].getName());
if ("name".equals(cookies[i].getName())) {
HttpSession session = request.getSession();
if (session.getAttribute("webbook.admin.name") == null
|| "".equals(session
.getAttribute("webbook.admin.name"))) {
session.setAttribute("webbook.admin.name", cookies[i]
.getValue());
System.out.println("Find cookie!");
response.sendRedirect(request.getContextPath()
+ "/admin/operate/servlet/manage"); }
break;
}
}
}
chain.doFilter(req, resp); }
登录成功,控制台里看到的是:
Enter AdminAutoLoginFilter
cookies is null? false
cookies[0].getName() :JSESSIONID
但是新打开一个浏览器窗口,再申请登录页面,控制台输出就为:
Enter AdminAutoLoginFilter
cookies is null? true
为什么啊?!
郁闷死了,我已经折腾好几天了!
[b]问题补充:[/b]
To: playfish
感谢你的回答。

目前我处理自动登录的流程与你推荐的博文是一样的,只是少了很多验证、加密的内容。但是即使这么简单,还是没有出来。原因还是我上面说的,明明有名字叫name的cookie,在Servlet里能找到,但在Filter里就是找不到!能不能麻烦你再细细读读我的代码?

To All:
恳请大家帮助!

[b]问题补充:[/b]

我在用户登录的Servlet里这样产生cookie的:
Cookie newCookie = new Cookie("name", name);
newCookie.setMaxAge(60*3);
response.addCookie(newCookie);
在Filter里这样读:
Cookie[] cookies = request.getCookies();
String cookieValue = null;
if(cookies != null) {
for(int i = 0; i < cookies.length; i ++) {
String cookieName = cookies[i].getName();
System.out.println("Found " + cookieName + "!");
if("name".equals(cookieName)) {
cookieValue = cookies[i].getValue();
session.setAttribute("webbook.admin.name", cookieValue);
String url = request.getRequestURI();
if("login.jsp".equals(url.lastIndexOf('/'))) {
response.sendRedirect(request.getContextPath() + "/admin/operate/servlet/manage");
}
break;
}
}
}
怎么就不行了?!

  • 写回答

3条回答 默认 最新

  • playfish05 2009-03-23 16:49
    关注

    不知道你了解了我给你看的博文了吗?

    你查找一下,你登陆后生成的cookie,打开那个cookie文件,查看一下cookie的路径,再看看你的filter的路径.是不是和我的博文所说的,路径不同的问题

    比如说你的cookie是生成在 localhost/login/test这个目录下的
    而你的filter却是在localhost/xyz这样的路径去读取cookie的.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 关于下拉菜单选项关联的问题
  • ¥15 如何修改pca中的feature函数
  • ¥20 java-OJ-健康体检
  • ¥15 rs485的上拉下拉,不会对a-b<-200mv有影响吗,就是接受时,对判断逻辑0有影响吗
  • ¥15 使用phpstudy在云服务器上搭建个人网站
  • ¥15 应该如何判断含间隙的曲柄摇杆机构,轴与轴承是否发生了碰撞?
  • ¥15 vue3+express部署到nginx
  • ¥20 搭建pt1000三线制高精度测温电路
  • ¥15 使用Jdk8自带的算法,和Jdk11自带的加密结果会一样吗,不一样的话有什么解决方案,Jdk不能升级的情况
  • ¥15 画两个图 python或R