实现用户自动登录功能通常需要使用到Cookies技术,下面是jsp实现用户自动登录功能的完整攻略:
步骤一:创建登录页面和处理登录请求的代码
首先,我们需要创建一个登录页面,用户输入用户名和密码后提交表单。表单中的action属性需要指向一个jsp页面:
<form name="loginForm" method="post" action="login.jsp">
<p>
<label for="username">用户名:</label>
<input type="text" id="username" name="username"/>
</p>
<p>
<label for="password">密 码:</label>
<input type="password" id="password" name="password"/>
</p>
<p>
<input type="checkbox" id="remember" name="remember"/>
<label for="remember">记住我</label>
</p>
<p>
<input type="submit" value="登录"/>
</p>
</form>
然后,我们需要创建login.jsp页面来处理登录请求,在login.jsp中,可以根据用户名和密码查询数据库判断用户是否输入正确并拥有相应的访问权限。如果用户选择了“记住我”选项,则需要在服务器端生成并发送一个Cookies给客户端,并将其登录信息保存在session中:
<%@page import="java.sql.*"%>
<%
String username=request.getParameter("username"); //获取表单参数
String password=request.getParameter("password");
Class.forName("com.mysql.jdbc.Driver");
Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","password");
PreparedStatement ps=con.prepareStatement("select * from users where username=? and password=?");
ps.setString(1,username);
ps.setString(2,password);
ResultSet rs=ps.executeQuery();
if(rs.next()){ //如果查询到匹配的用户
session.setAttribute("username",username); //将用户名保存到session中
if(request.getParameter("remember")!=null){ //如果用户选择了“记住我”选项
Cookie cookie=new Cookie("username",username); //创建一个Cookies
cookie.setMaxAge(7*24*60*60); //设置Cookies的有效期为7天
response.addCookie(cookie); //将Cookies发送给客户端
}
response.sendRedirect("welcome.jsp"); //重定向到欢迎页面
}else{ //如果输入错误
out.println("用户名或密码错误");
}
rs.close();
ps.close();
con.close();
%>
步骤二:创建检查自动登录的代码
在每次用户访问需要授权的页面时,我们需要检查其是否已经自动登录。如果已经自动登录,服务器会从Cookies中取出用户名并自动给用户登录。检查自动登录的过程通常会放在一个全局过滤器中。
<%@page import="java.io.*"%>
<%@page import="javax.servlet.*"%>
<%@page import="javax.servlet.http.*"%>
<%@page import="java.util.*"%>
<%
String username=null;
Cookie[] cookies=request.getCookies();
if(cookies!=null){
for(int i=0;i<cookies.length;i++){
Cookie cookie=cookies[i];
if("username".equals(cookie.getName())){
username=cookie.getValue(); //从Cookies中取出用户名
break;
}
}
}
if(username!=null){ //如果找到了用户名
session.setAttribute("username",username); //将用户名保存到session中
}
chain.doFilter(request, response); //继续执行下一个过滤器或Servlet
%>
在上述代码中,我们使用了doFilter方法,这个方法表示让请求继续执行下一个过滤器或Servlet。在检查自动登录的过程中,我们只是检查了Cookies中是否包含了username的Cookies,如果包含了就将其取出并赋值给session,而不像处理登录请求那样需要查询数据库和验证输入的密码是否正确。
以上便是jsp实现用户自动登录功能的完整攻略,接下来我们同样需要结合示例讲解这个过程:
示例1:自动登录功能示例
下面是一个实现自动登录功能的完整示例。这个示例展示了如何在用户登录成功后,通过Cookies和session自动登录用户,以及如何检查是否存在自动登录信息。
首先是login.jsp页面代码:
<form name="loginForm" method="post" action="login.jsp">
<p>
<label for="username">用户名:</label>
<input type="text" id="username" name="username"/>
</p>
<p>
<label for="password">密 码:</label>
<input type="password" id="password" name="password"/>
</p>
<p>
<input type="checkbox" id="remember" name="remember"/>
<label for="remember">记住我</label>
</p>
<p>
<input type="submit" value="登录"/>
</p>
</form>
然后是login.jsp页面的代码:
<%@page import="java.io.*"%>
<%@page import="java.util.*"%>
<%@page import="javax.servlet.*"%>
<%@page import="javax.servlet.http.*"%>
<%@page import="java.sql.*"%>
<%
// 获取用户名和密码
String username = request.getParameter("username");
String password = request.getParameter("password");
// 查询数据库查看用户名和密码是否匹配
Class.forName("com.mysql.jdbc.Driver");
Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","password");
PreparedStatement ps=con.prepareStatement("select * from users where username=? and password=?");
ps.setString(1,username);
ps.setString(2,password);
ResultSet rs=ps.executeQuery();
if (rs.next()) { // 如果用户名和密码匹配
session.setAttribute("username", username); // 将用户名保存到session中
if(request.getParameter("remember")!=null){ // 如果勾选了“记住我”,则生成并发送Cookies
Cookie cookie=new Cookie("username",username); //创建一个Cookies
cookie.setMaxAge(7*24*60*60); // 设置有效期为7天
response.addCookie(cookie); // 发送Cookies给客户端
}
response.sendRedirect("index.jsp"); // 重定向到主页
} else { // 如果用户名和密码不匹配
out.println("用户名或密码不正确!");
}
rs.close();
ps.close();
con.close();
%>
最后是全局过滤器filter.jsp的代码:
<%@page import="java.io.*"%>
<%@page import="java.util.*"%>
<%@page import="javax.servlet.*"%>
<%@page import="javax.servlet.http.*"%>
<%
String username=null;
Cookie[] cookies=request.getCookies(); // 获取所有Cookies
if(cookies!=null){
for(int i=0;i<cookies.length;i++){ // 循环查找名为username的Cookies
Cookie cookie=cookies[i];
if("username".equals(cookie.getName())){
username=cookie.getValue(); // 将username赋值给一个变量
break;
}
}
}
if(username!=null){ // 如果找到了username的Cookies
session.setAttribute("username",username); // 将username写入session中
}
chain.doFilter(request, response); // 继续执行下一个Servlet或过滤器
%>
这个示例演示了如何使用Cookies和session来实现自动登录功能,以及如何检查是否存在自动登录信息。在登录页面中,用户输入了用户名和密码并勾选了“记住我”后,登录后台会在session中保存用户名,并通过创建一个有效期为7天的Cookies将用户名发送给客户端,下一次用户打开浏览器时,浏览器会自动通过Cookies发送用户名给服务器,并且通过全局过滤器filter.jsp就可以自动登录,而不需要再次输入用户名和密码。
示例2:清除自动登录信息示例
下面是一个示例,演示如何删除保存在Cookies中的自动登录信息。
首先是一个删除自动登录信息的link,当用户点击这个link时将清除Cookies中保存的自动登录信息:
<a href="remove.jsp">删除自动登录信息</a>
然后是remove.jsp页面的代码:
<%@page import="java.util.*"%>
<%@page import="javax.servlet.*"%>
<%@page import="javax.servlet.http.*"%>
<%
// 获取所有Cookies
Cookie[] cookies = request.getCookies();
if (cookies != null) {
for (int i = 0; i < cookies.length; i++) {
Cookie cookie = cookies[i];
if ("username".equals(cookie.getName())) { // 如果找到了username的Cookies
cookie.setMaxAge(0); // 清除Cookies
response.addCookie(cookie);
}
}
}
response.sendRedirect("login.jsp"); // 重定向到登录页面
%>
这个示例演示了如何删除Cookies中保存的自动登录信息,当用户点击删除自动登录信息的link时,服务器会查找Cookies中的username信息并将其清除。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:jsp实现用户自动登录功能 - Python技术站