当前位置:网站首页>拦截器实现网页用户登陆

拦截器实现网页用户登陆

2022-06-21 16:08:00 冷丁_

拦截器实现网页用户登陆


实现思路
1.有一个登陆页面,需要写一个controller访问页面。
2. 登陆页面有一提交表单的动作。需要在controller中处理。判断用户名密码是否正确。如果正确,向session中写入用户信息。返回登陆成功。
3. 拦截用户请求,判断用户是否登陆。如果用户已经登陆。放行, 如果用户未登陆,跳转到登陆页面
在这里插入图片描述

1.编写一个登陆页面login.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<h1>登陆页面</h1>
<hr>
<body>
<form action="${pageContext.request.contextPath}/user/login">
    用户名:<input type="text" name="username"><br>
    密码:<input type="password" name="pwd"><br>
    <input type="submit" value="提交">
</form>
</body>
</html>

2.编写一个Controller处理请求

@Controller
@RequestMapping("/user")
public class UserController {
    
    //跳转到登陆页面
    @RequestMapping("/jumplogin")
    public String jumpLogin(){
    
        return "login";
    }
    //跳转到成功页面
    @RequestMapping("/jumpSuccess")
    public String jumpSuccess(){
    
        return "success";
    }
    //登陆提交
    @RequestMapping("/login")
    public String login(HttpSession session, String username, String pwd){
    
        //向session记录用户身份信息
        System.out.println("接收前端==="+username);
        session.setAttribute("user",username);
        return "success";
    }
    //退出登陆
    @RequestMapping("logout")
    public String logout(HttpSession session){
    
        //session过期
        session.invalidate();
        return "login";
    }

}

3.编写一个登陆成功的页面success.jsp

  <%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h1>登陆成功页面</h1>
<hr>
${
    user}
<a href="${pageContext.request.contextPath}/user/logout">注销</a>
</body>
</html>

4.在 index 页面上测试跳转!启动Tomcat 测试,未登录也可以进入主页!
index.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>$Title$</title>
  </head>
  <body>
  <h1>首页</h1>
  <hr>
<%--  登陆--%>
  <a href="${pageContext.request.contextPath}/user/jumplogin">登陆</a>
  <a href="${pageContext.request.contextPath}/user/jumpSuccess">成功页面</a>
  </body>
</html>

5.编写用户登陆拦截器

public class LoginInterceptor implements HandlerInterceptor {
    
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    
        //如果是登陆页面则放行
        System.out.println("uri: "+request.getRequestURI());
        if(request.getRequestURI().contains("login")){
    
            return true;
        }
        HttpSession session=request.getSession();
        //如果用户已登陆也放行
        if(session.getAttribute("user")!=null){
    
            return true;
        }
        //用户没有登陆跳转到登陆页面
        request.getRequestDispatcher("/WEB-INF/jsp/login.jsp").forward(request,response);
        return false;
    }
}

在springmvc文件中配置拦截器

<!-- 拦截器配置-->
    <mvc:interceptors>
        <mvc:interceptor>
<!-- /**包括路径及其子路径-->
<!-- /adimin/* 拦截的是/admin/add等等这种,/admin/add/user不会被拦截-->
<!-- /admin/** 拦截的是/admin/下的所有-->
            <mvc:mapping path="/**"/>
            <bean class="com.lding.config.MyInterceptor"></bean>
        </mvc:interceptor>
        <mvc:interceptor>
            <mvc:mapping path="/user/**"/>
            <bean id="loginInterceptor" class="com.lding.config.LoginInterceptor"></bean>
        </mvc:interceptor>
    </mvc:interceptors>

在这里插入图片描述
直接点击成功页面进不去,会自动跳转到登陆页面,登陆后才能进入成功页面
在这里插入图片描述
在这里插入图片描述

如果对您有帮助,免费的赞点一个~~~感谢

在这里插入图片描述

原网站

版权声明
本文为[冷丁_]所创,转载请带上原文链接,感谢
https://blog.csdn.net/qq_41359998/article/details/122820310