java使用cookie实现下次自动登录

Cookie通过设置后,生命周期可以与Session一样,或者比它长久。

通常来说,根据我的习惯,对于一些通用的业务能够,我希望把它们封装到一个工具类里面,使用方法就是直接调用它的静态方法。

CookieTool.java 源代码:

/**
 * 设置cookie(接口方法)
 * @param response
 * @param name  cookie名字
 * @param value cookie值
 * @param maxAge cookie生命周期  以秒为单位
 */
public static void addCookie(HttpServletResponse response,String name,String value,int maxAge){
 Cookie cookie = new Cookie(name,value);
 cookie.setPath("/");
 if(maxAge>0)  cookie.setMaxAge(maxAge);
 response.addCookie(cookie);
}

/**
 * 根据名字获取cookie(接口方法)
 * @param request
 * @param name cookie名字
 * @return
 */
public static Cookie getCookieByName(HttpServletRequest request,String name){
 Map<String,Cookie> cookieMap = ReadCookieMap(request);
 if(cookieMap.containsKey(name)){
  Cookie cookie = (Cookie)cookieMap.get(name);
  return cookie;
 }else{
  return null;
 } 
}

/**
 * 将cookie封装到Map里面(非接口方法)
 * @param request
 * @return
 */
private static Map<String,Cookie> ReadCookieMap(HttpServletRequest request){ 
 Map<String,Cookie> cookieMap = new HashMap<String,Cookie>();
 Cookie[] cookies = request.getCookies();
 if(null!=cookies){
  for(Cookie cookie : cookies){
   cookieMap.put(cookie.getName(), cookie);
  }
 }
 return cookieMap;
}

好了,工具类的静态方法已经定义好了。

我先假定楼主对表现层提交表单到业务层是有概念的,

这里存在两种情况:

(1)客户端没有登录记录,则进入登录页面

(2)客户端存在有效的登录记录,进入登录后的页面。

因此在显示登录页面之前就要通过一个业务方法进行判断,其中最核心的是:

Cookie cokLoginName = CookieTool.getCookieByName(request,"loginName");
Cookie cokLoginPwd = CookieTool.getCookieByName(request,"loginPwd");

if (cokLoginName != null && cokLoginPwd != null && cokLoginName.getValue()!=null && cokLoginPwd.getValue()!=null){
        String loginName = cokLoginName.getValue();
        String loginPwd = cokLoginPwd.getValue();
        //检查到客户端保存了用户的密码,进行该账户的验证
     //这里要使用你自己的账户验证方法
         //如果账户验证成功,则跳转到登录成功的页面
         //如果账户验证失败,则
              CookieTool.addCookie(response,"loginName",null,0);  //清除Cookie
                         CookieTool.addCookie(response,"loginPwd",null,0);    //清除Cookie
                          //然后跳转到登录页面
}

其次就是在登录JSP页面的表单所提交到的登录Action。这里假设表单提交到的是Servlet,读取表单参数楼主应该没有问题吧?我这里只关注和插入Cookie代码。

插入的地方在账户密码的正确性经过验证,在跳转页面之前。假设储存用户输入的帐号和密码字段分别为String username,String password。

int  loginMaxAge = 30*24*60*60;   //定义账户密码的生命周期,这里是一个月。单位为秒
if ( 单选框 ) {
      CookieTool.addCookie(response , "loginName" , username , loginMaxAge); 
      CookieTool.addCookie(response , "loginPwd" , password , loginMaxAge);        
}
 
转自:http://zhidao.baidu.com/link?url=zby0GWQy_moMvM9VEJji7wSr-WOVjxeL49yRmDAUJEVz5TfLTjDpySSM0-NzVKDF6RS5qRLDrOWAh0gYc6SkHq
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
JavaCookie是一个Java库,可以用来处理cookie。要实现自动登录,可以使用JavaCookie来保存登录凭证(如用户名和密码)的cookie,然后在每次访问需要登录的页面时,检查是否存在登录凭证的cookie,并根据cookie中的信息进行自动登录。 以下是一个简单的示例代码,演示了如何使用JavaCookie实现自动登录: ```java import java.io.IOException; import java.net.HttpURLConnection; import java.net.URL; import java.util.HashMap; import java.util.Map; import java.util.Scanner; import com.github.javaxcelstefan.javacookie.Cookies; public class AutoLoginExample { private static final String LOGIN_URL = "https://example.com/login"; private static final String SECRET_PAGE_URL = "https://example.com/secret"; public static void main(String[] args) throws IOException { Cookies cookies = new Cookies(); // 检查是否存在登录凭证的cookie,并根据cookie中的信息进行自动登录 if (cookies.containsKey("username") && cookies.containsKey("password")) { String username = cookies.get("username").getValue(); String password = cookies.get("password").getValue(); if (login(username, password)) { System.out.println("自动登录成功!"); } else { System.out.println("自动登录失败,需要手动登录。"); } } else { System.out.println("没有保存登录凭证的cookie,需要手动登录。"); } // 访问需要登录才能访问的页面 String secretPageContent = getSecretPageContent(cookies); System.out.println(secretPageContent); // 保存登录凭证的cookie,以便下次自动登录 cookies.put("username", "USERNAME"); cookies.put("password", "PASSWORD"); } private static boolean login(String username, String password) throws IOException { // 发送POST请求进行登录 URL url = new URL(LOGIN_URL); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("POST"); connection.setDoOutput(true); connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); Map<String, String> parameters = new HashMap<>(); parameters.put("username", username); parameters.put("password", password); String postData = String.join("&", parameters.entrySet().stream() .map(entry -> entry.getKey() + "=" + entry.getValue()) .toArray(String[]::new)); connection.getOutputStream().write(postData.getBytes()); int responseCode = connection.getResponseCode(); connection.disconnect(); return responseCode == 200; // 如果返回码是200,则表示登录成功 } private static String getSecretPageContent(Cookies cookies) throws IOException { // 发送GET请求获取需要登录才能访问的页面的内容 URL url = new URL(SECRET_PAGE_URL); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("GET"); cookies.setCookies(connection); // 设置Cookie Scanner scanner = new Scanner(connection.getInputStream()); String content = scanner.useDelimiter("\\A").next(); scanner.close(); connection.disconnect(); return content; } } ``` 在上面的示例中,我们使用JavaCookie来保存用户名和密码的cookie,并在访问需要登录才能访问的页面时,将cookie设置到HTTP连接中。如果存在保存的登录凭证的cookie,则会尝试自动登录,如果登录成功,则可以直接访问需要登录才能访问的页面。如果登录失败,则需要手动登录登录成功后,我们将保存登录凭证的cookie写入到JavaCookie中,以便下次自动登录
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值