书写一个servlet的类,进行登录操作
package com.yunhe.servlet; /**
* @author hou
* @date 2021/12/11
*/
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
@WebServlet(name = "LoginServlet", value = "/LoginServlet")
public class LoginServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Object username = request.getSession().getAttribute("username");
if(username!=null){
request.getRequestDispatcher("WEB-INF/success.jsp").forward(request,response);
}else {
request.getRequestDispatcher("WEB-INF/login.jsp").forward(request,response);
}
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String username = request.getParameter("username");
if("admin".equals(username)){
//登录成功后,将用户存在session域中,可以避免当前会话多次登录
request.getSession().setAttribute("username",username);
request.getRequestDispatcher("WEB-INF/success.jsp").forward(request,response);
}else{
request.getRequestDispatcher("WEB-INF/login.jsp").forward(request,response);
}
}
}
可以设置过滤器校验请求,必须在登录后再能继续请求对应的服务,如果没有登录跳转至登录页面,如果在每个服务doget请求进行书写会造成代码的冗余,可以将登录验证操作书写在过滤器中,这样当请求时通过过滤器验证是否登录过,如果登录过继续请求对应的服务,如果没有登录过则跳转登录页面进行登录.
package com.yunhe.filter; /**
* @author hou
* @date 2021/12/11
*/
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
@WebFilter(filterName = "/*")
public class LoginFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException {
chain.doFilter(request, response);
//将ServletRequest强转为HttpServletRequest
HttpServletRequest request1 = (HttpServletRequest) request;
//获取请求的路径
String requestURI = request1.getRequestURI();
if("/ideaDay1210/LoginServlet".equals(requestURI)){
//如果地址是登录页面就放行
chain.doFilter(request1,response);
}else {
Object username = request1.getSession().getAttribute("username");
if(username!=null){
//获取session指定数据 不为空则放行
chain.doFilter(request1,response);
}else {
//为null说明没有登录
//跳转至登录页面
request.getRequestDispatcher("WEB-INF/login.jsp").forward(request,response);
}
}
}
}
登录页面login.jap页面
<%--
Created by IntelliJ IDEA.
User: houbing
Date: 2021/12/11
Time: 13:07
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<form action="LoginServlet" method="post">
用户名:<input type="text" name="username">
<input type="submit" value="登录">
</form>
</body>
</html>
登录成功的页面jsp
<%--
Created by IntelliJ IDEA.
User: houbing
Date: 2021/12/11
Time: 13:11
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
欢迎用户:${username} 登录
</body>
</html>