在shiro.xml配置文件中,添加如下代碼
<!--添加記住我功能--> <!-- rememberMeCookie asplover begin--> <!-- 聲明cookie對象--> <bean id="rememberMeCookie" class="org.apache.shiro.web.servlet.SimpleCookie"> <constructor-arg value="rememberMe"/> <property name="httpOnly" value="true"/> <property name="maxAge" value="2592000"/> <!-- 30天 --> <!-- <property name="domain" value="sqfcw.net"/>--> </bean> <!-- rememberMe管理器 --> <bean id="rememberMeManager" class="org.apache.shiro.web.mgt.CookieRememberMeManager"> <property name="cookie" ref="rememberMeCookie"/> </bean> <!-- rememberMeCookie asplover end-->
寫入cookie
@RequestMapping(value = "/login") public String Login(String username, String password, HttpSession session, HttpServletRequest request, HttpServletResponse response, Model model){ if(username==null){ model.addAttribute("message", "賬號不為空"); return "login"; } //主體,當前狀態為沒有認證的狀態“未認證” Subject subject = SecurityUtils.getSubject(); // 登錄后存放進shiro token UsernamePasswordToken token=new UsernamePasswordToken(username,password); //測試添加記住我 token.setRememberMe(true); User user; //類級變量,check()方法會用 //登錄方法(認證是否通過) //使用subject調用securityManager,安全管理器調用Realm try { //利用異常操作 //需要開始調用到Realm中 System.out.println("========================================"); System.out.println("1、進入認證方法"); subject.login(token); user = (User)subject.getPrincipal(); session.setAttribute("user",subject); model.addAttribute("message", "messagee值為登錄完成"); //cookie的學習開始---------- begin SimpleCookie simpleCookie = new SimpleCookie(); simpleCookie.setName("lang"); simpleCookie.setValue("lang of value"); simpleCookie.setName("userAccount"); simpleCookie.setValue(user.getAccount()); Cookie cookie = simpleCookie; //"lang",lang cookie.setComment("lang type"); cookie.setMaxAge(360*24*60*60);//最大時間 cookie.saveTo(request,response); System.out.println("登錄完成"); } catch (UnknownAccountException e) { model.addAttribute("message", "賬號密碼不正確"); return "index"; } return "test"; }
讀取cookie
@RequestMapping("/check") public String check(HttpSession session,HttpServletRequest request){ //判斷session Subject subject=(Subject)session.getAttribute("user"); //取得cookie // Cookie[] cookies = request.getCookies(); javax.servlet.http.Cookie[] cookies = request.getCookies(); System.out.println("cookies取得值"+cookies); System.out.println("cookies取得值"+cookies[0].getValue()); for ( javax.servlet.http.Cookie cookie:cookies ) { System.out.println("從瀏覽器獲取"+cookie.getName()+"的值:"+cookie.getValue()); } }