Shiro登录的时候,已经认证成功了
但一直未跳转到登录成功页面,最后找了半天.........
发现,自己在把https换成http的时候,设置了cookie
manager.getSessionIdCookie().setSecure(false);
这个应该设置成false,我设置成true了,所以一直无法登录
原来我的访问URL协议头是HTTP,而Weblogic里面的配置被人改动了。把cookie-secure的值改为了true,true意味着"指示浏览器仅通过 HTTPS 连接传回 cookie。这可以确保 cookie ID 是安全的,且仅用于使用 HTTPS 的网站。如果启用此功能,则 HTTP 上的会话 Cookie 将不再起作用。"唉,明白了,怪不得一直都取不到COOKIE。
1 public void service(HttpServletRequest request, HttpServletResponse response) {
2 // 创建cookie
3 Cookie cookie = new Cookie("key", "value");
4 // 关键地方:cookie设为false
5 cookie.setSecure(false);
6 response.addCookie(cookie);
7 // 从request中取得cookie,并输出
8 Cookie[] cookies = request.getCookies();
9 for (Cookie c : cookies) {
10 System.out.println(c.getValue());
11 }
12 RequestDispatcher dispatcher = request
13 .getRequestDispatcher("index.jsp");
14 try {
15 dispatcher.forward(request, response);
16 } catch (ServletException e) {
17 e.printStackTrace();
18 } catch (IOException e) {
19 e.printStackTrace();
20 }
21 }
除了上面这种原因导致了客户端一直不停得跳转到登录页面,还发现了一种原因,就是虽然登录验证通过了,但是登录之后,又会跳到登录页,且每次都在不停得产生新的sessionid,困扰了我很久。
后来终于解决了!!
在请求过程中,shiro的默认存储sessionid的cookie名是JSESSIONID,在某些情况下,可能会被容器改写,所以改掉这个名称不要使用默认的名称就可以了!!
public DefaultWebSessionManager() {
Cookie cookie = new SimpleCookie(ShiroHttpSession.DEFAULT_SESSION_ID_NAME);
cookie.setHttpOnly(true); //more secure, protects against XSS attacks
this.sessionIdCookie = cookie;
this.sessionIdCookieEnabled = true;
}