Java-实现自动登录功能
原创约 1604 字大约 5 分钟...
Java-实现自动登录功能
注意
本博文仅供学术研究和交流参考,严禁将其用于商业用途。如因违规使用产生的任何法律问题,使用者需自行负责。
勾选自动登录:会写cookie: 其实是一个文件 保存在本地硬盘下面 可以通过资源管理器访问到
cookie文件中保存了你的username password 用户类型,用于下次登陆,只不过是自动的
如图所示,页面中有一个自动登陆的复选框

**login.jsp:**核心代码
<form name="form1" method="post" action="<%=request.getContextPath()%>/LoginServlet" id="loginForm">
<table width="933" border="0" align="center" cellpadding="0" cellspacing="0" style="margin:120px;">
<tr>
<td height="412" valign="top" background="<%=request.getContextPath()%>/images/bg_imgJava_48_2.jpg"><table height="300" border="0" cellspacing="0">
<tr>
<td width="538"> </td>
<td height="130" colspan="6"> </td>
</tr>
<tr>
<td rowspan="9"> </td>
<td width="98" height="20" align="right"><img src="<%=request.getContextPath()%>/images/text_yh.gif" width="60" height="18"></td>
<td width="16"> </td>
<td width="136">
<input name="username" type="text" id="textfield" size="18" />
<%-- <% String login_message=(String)request.getAttribute("message");
if(login_message!=null)
{
%>
<%=login_message%>
<% }
%> --%>
<span class="text_red">${login_message}</span>
</td>
<td width="55"> </td>
<td width="44"> </td>
<td width="32"> </td>
</tr>
<tr>
<td height="20" align="right"> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
</tr>
<tr>
<td height="20" align="right"><img src="<%=request.getContextPath()%>/images/text_password.gif" width="60" height="18"></td>
<td> </td>
<td><input name="password" type="text" id="textfield2" size="18" /></td>
<td> </td>
<td> </td>
<td> </td>
</tr>
<tr>
<td height="20" align="right"> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
</tr>
<tr>
<td height="20" align="right"><img src="<%=request.getContextPath()%>/images/text_yzm.gif" width="60" height="18"></td>
<td> </td>
<td><input name="code" type="text" id="textfield3" size="18" /></td>
<td>
<span class="text_cray1">
<img src="<%=request.getContextPath()%>/ValidateCodeServlet" alt="" height="20" id="login_image_code" onclick="refresh()"/>
</span></td>
<td><img src="<%=request.getContextPath()%>/images/text_sx.gif" width="32" height="18" onclick="refresh()" ></td>
<td align="left"> </td>
</tr>
<script>
function refresh(){
document.querySelector("#login_image_code").src = "<%=request.getContextPath()%>/ValidateCodeServlet?data="+new Date();
}
</script>
<tr>
<td height="30"> </td>
<td> </td>
<td valign="bottom"><table width="100%" border="0" cellspacing="0">
<tr>
<td width="26" align="left"><input name="auto_Login" type="checkbox" value="auto" style=" margin:0 auto;"/></td>
<--此处是自动登录的复选框--->
<td width="170"><img src="<%=request.getContextPath()%>/images/text_zddl.gif" width="60" height="18"></td>
</tr>
</table></td>
<td> </td>
<td> </td>
<td> </td>
</tr>
<tr>
<td height="20"> </td>
<td> </td>
<td colspan="2"> </td>
<td> </td>
<td> </td>
</tr>
<tr>
<td height="20"> </td>
<td> </td>
<td colspan="2"><table width="200" border="0" cellspacing="0">
<tr>
<td width="78"><input name="button" type="button" class="butlogin" id="button" value="" onClick="UserLogin()"></td>
<td> </td>
<td width="78"><input name="button2" type="button" class="butzc" id="button2"value="" onClick="UserRegistration()"></td>
</tr>
</table></td>
<td> </td>
<td> </td>
</tr>
<tr>
<td height="20"> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
</tr>
</table></td>
</tr>
</table>
</form>
LoginServlet.java
package net.ptcs.my12306.controller;
import java.io.IOException;
import java.net.URLEncoder;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import net.ptcs.my12306.entity.Users;
import net.ptcs.my12306.service.UserService;
import net.ptcs.my12306.util.Md5Utils;
/**
* Servlet implementation class LoginServlet
*/
@WebServlet(description = "", urlPatterns = { "/LoginServlet" })
public class LoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//解决乱码问题
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
//1.获取登录页面的数据
String username = request.getParameter("username");
String password = request.getParameter("password");
String code = request.getParameter("code");
String auto = request.getParameter("auto_Login");//获取用户是否自动登录的复选框的值
//2、服务端非空校验
StringBuffer sb = new StringBuffer();
if(username == null || "".equals(username.trim())) {
sb.append("用户名为空");
}
if(password == null || "".equals(password.trim())) {
if(sb.length() == 0) {//此处是为咯让页面显示只有一个提示,而不是一堆提示信息
sb.append("密码为空");
}
}
if(code == null || "".equals(password.trim())) {
if(sb.length() == 0) {
sb.append("验证码为空");
}
}
if(sb.length() > 0) {
request.setAttribute("login_message", sb.toString());
request.getRequestDispatcher("/login.jsp").forward(request, response);
}else {
//3.验证码合法性校验
String session_code=(String) request.getSession().getAttribute("code");
if(session_code.equalsIgnoreCase(code)) {
/* 怎么写登录?
* 2.调用底层service的login方法,返回一条用户数据,这是一种用户体验
*
* 如果用户信息不为空,则登录成功,跳转到用户模块的主页面
* 如果用户信息为空,则登录失败,提示失败信息并返回登录页面
*/
UserService service = UserService.getInstance();
Users user = service.login(username,password);
if(user == null) {
//登录失败
request.setAttribute("message", "用户名或者密码错误");
request.getRequestDispatcher("/login.jsp").forward(request, response);
}else {
//登陆成功
//登录成功
//在主页面中显示用户信息,1.把用户信息放入一个地方,这个地方各个页面都可以从这里拿数据,那么这个地方是HttpSession
HttpSession session=request.getSession();
session.setAttribute("user", user);
//根据用户是否自动登录,来写cookie
if("auto".equals(auto))
{
//写Cookie的套路:先new一个cookie,然后调用response的addCookie方法就可以写cookie了
Cookie username_cookie=new Cookie("username", URLEncoder.encode(username, "utf-8"));
username_cookie.setMaxAge(7*24*60*60);//过期时间为一周(备注:值为-1会话级cookie关闭浏览器失效 值为 0不记录cookie)
username_cookie.setPath(request.getContextPath()+"/");//设置cookie到当前工程的路径
Cookie password_cookie=new Cookie("password",Md5Utils.md5(password));
password_cookie.setMaxAge(7*24*60*60);
password_cookie.setPath(request.getContextPath()+"/");
Cookie rule_cookie=new Cookie("rule",user.getRule());
rule_cookie.setMaxAge(7*24*60*60);
rule_cookie.setPath(request.getContextPath()+"/");
response.addCookie(username_cookie);
response.addCookie(password_cookie);
response.addCookie(rule_cookie);
}
//成功后跳转到哪?要看用户的rule:如果是管理员,去往管理员主页面;如果是普通用户,去往普通用户主页面
if("2".equals(user.getRule())) {
//普通用户
request.getRequestDispatcher("user/index.jsp").forward(request,response);
}else {
//管理员
request.getRequestDispatcher("admin/index.jsp").forward(request, response);
}
}
}else {
//验证码输入错误
request.setAttribute("login_message", "验证码输入错误");
request.getRequestDispatcher("/login.jsp").forward(request, response);
}
}
}
}
login.jsp里写判断是否有cookie的代码
<%
//如果用户前面登录时勾选了自动登录,那么访问登录页面时需要先获取cookie中的内容,如果有,就说明上次写cookie写成功了,
//那么根据cookie的内容自动跳转到对应的首页面
Cookie[] cookies=request.getCookies();
if(cookies!=null)
{
String username=null;
String password=null;
String rule=null;
Users user=null;
for(Cookie c:cookies)
{
if("username".equals(c.getName()))
{
username=c.getValue();
}
if("password".equals(c.getName()))
{
password=c.getValue();
}
if("rule".equals(c.getName()))
{
rule=c.getValue();
}
}
if(username!=null&&password!=null&&rule!=null&&!"".equals(username))
{
user=new Users();
user.setUsername(username);
user.setPassword(password);
user.setRule(rule);
session.setAttribute("user", user);
//跳转到对应权限页面
if("1".equals(rule))
{
response.sendRedirect("admin/index.jsp");
}else if("2".equals(rule))
{
response.sendRedirect("user/index.jsp");
}
}
}
%>
测试
登陆进去之后,可以看到浏览器里是有记录对应的cookie值
下面见证奇迹的时刻到咯。。。。。。 
总结
从上面的动态图可以看到,输入登录页面直接跳过咯输入用户名跟密码的页面直接跳到咯主页面,以后自动登录功能实现成功。
分割线
相关信息
以上就是我关于 Java-实现自动登录功能 知识点的整理与总结的全部内容,希望对你有帮助。。。。。。。
Powered by Waline v2.15.4