在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;
}
}
}
怎么就不行了?!

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

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

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

[url]http://blog.csdn.net/lyhapple/archive/2007/10/09/1817308.aspx[/url]

google来的答案,这段代码写得很整齐,也很漂亮,仔细研究下它的做法相信对你实现这个功能会很有帮助的.

cookie有安全机制,只允许同一个域下面的访问,也就是说比如你的cookie如果生成cookie的路径跟读取cookie的路径不同的话,可能就读取不到..检查一下你的cookie的路径.

我之前也有碰到类似的读取不到cookie的问题,你可以参考下我的博文,或许我的解决方法对你有用

[url]http://playfish.iteye.com/blog/269436[/url]