網站首頁 編程語言 正文
記錄一下java學習過程中的bug
cookie.setPath、setMaxAge都設置了,但是在登錄頁面讀取不到添加的cookie信息
后端LoginServlet界面
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//接收數據
String username = request.getParameter("username");
String password = request.getParameter("password");
//從ServletContext域中獲得保存用戶信息集合;
List<User> list= (List<User>) this.getServletContext().getAttribute("list");
for(User user:list) {
//判斷用戶名是否正確
if(username.equals(user.getUsername())) {
//用戶名是正確的
if(password.equals(user.getPassword())) {
//密碼也正確
//登錄成功
//將用戶信息保存到session中:
request.getSession().setAttribute("user", user);
response.sendRedirect(request.getContextPath()+"/success.jsp");
//完成記住用戶名的功能
String remeber= request.getParameter("remeber");
if("true".equals(remeber)) {
Cookie cookie = new Cookie("username",user.getUsername());
//設置有效的路徑和有效時間
cookie.setPath("/reg_login");
cookie.setMaxAge(60*60*24);//24hour
//將cookie回寫到瀏覽器
response.addCookie(cookie);
}
return;
}
}
}
//登陸失敗;
request.setAttribute("msg", "用戶名或密碼錯誤");
request.getRequestDispatcher("/login.jsp").forward(request, response);
}
前端Login.jsp界面
<%
String username = "";
//獲得從客戶端攜帶過來的所有Cookie
Cookie[] cookies = request.getCookies();
//從Cookie的數組中查找指定名稱的Cookie
Cookie cookie = CookieUtils.findCookie(cookies,"username");
if(cookie !=null){
username = cookie.getValue();
}
%>
然后cookie信息不起作用,在login.jsp頁面添加打印cookie信息代碼,發現LoginServet中cookie信息并沒有回傳到瀏覽器,也就是說response.addCookie(cookie);沒有起作用。
<%
String userName = "";
//獲得從客戶端攜帶過來的所有cookie
Cookie[]cookies = request.getCookies();
//從Cookie的數組中查找指定名稱的Cookie
for(Cookie cookie:cookies){
System.out.println("cookie.Name:"+cookie.getName());
System.out.println("cookie.value:"+cookie.getValue());
if(cookie.getName().equals("userName")){
userName = cookie.getValue();
}
}
%>
搜了好長時間沒找到想要的解決方案,最終在https://www.cnblogs.com/woestave/p/6260526.html中找到了答案。
錯誤:
因為在LoginServlet頁面中,登錄成功后response.sendRedirect(request.getContextPath()+"/success.jsp"); 已經把請求轉發給另一個頁面了,所以雖然也創建了cookie,并能輸出cookie.getName(),但是response已經不具備向瀏覽器響應請求的能力了,response.addCookie(cookie)也就不起作用
解決方案:
for(User user:list){
if(user.getUsername().equals(userName)){
if(user.getPassword().equals(password)){
//完成記住用戶名的功能
String remember = request.getParameter("remember");
if("true".equals(remember)){
Cookie cookie = new Cookie("userName",userName);
cookie.setPath(request.getContextPath());
cookie.setMaxAge(60*60*24);
response.addCookie(cookie);
}
//登錄成功,重定向到成功頁面
request.getSession().setAttribute("user",user);
response.sendRedirect(request.getContextPath()+"/success.jsp");
return;
}
}
}
原文鏈接:https://blog.csdn.net/cpt_ljy/article/details/103764352
相關推薦
- 2022-06-17 Go語言學習之函數的定義與使用詳解_Golang
- 2023-06-18 C#如何動態創建lambda表達式_C#教程
- 2022-09-17 C++中cin的返回值問題_C 語言
- 2022-11-11 Android布局ConstraintLayout代碼修改約束及輔助功能_Android
- 2022-05-26 Tomcat服務部署及優化的實現_Tomcat
- 2022-05-17 Redis調用Lua腳本及使用場景快速掌握_Redis
- 2021-11-18 C#?利用VS編寫一個簡單的網游客戶端_C#教程
- 2022-03-09 C語言直接插入排序算法介紹_C 語言
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支