首页 > 其他分享 >springmvc 拦截器

springmvc 拦截器

时间:2023-04-29 19:22:37浏览次数:33  
标签:拦截器 登录 springmvc 用户 session jsp login main

自定义一个拦截器LoginInterceptor这个拦截器的作用就是用户首次要去访问网站,直接点击首页会被拦截并跳转到登录页面,登录成功后(session有记录)方可直接来到首页不被拦截
测试1:
题目:用户在首次访问前提下,需设置拦截器,使得用户只要登录了才能到达用户主页

思路:首先要优化一下首页index.jsp,在首页放置跳转到登录页面和主页的两个超链接,

用户在首页点击登录后,跳转到controller中路径为/goLogin的方法,这个方法跳转到登录页面login.jsp(因为外部用户不能直接访问到/WEB-INF/目录下的资源,因此只能通过内部跳转),用户在登录页面提交表单到controller中路径为/login的方法,该方法执行完跳转到用户的主页main.jsp。在上面这个过程中需要添加拦截器即不允许用户未经过登录就范文到主页

index.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>首页</title>
  </head>
  <body>

  <h1><a href="${pageContext.request.contextPath}/goLogin">登录</a> </h1>
  <h1><a href="${pageContext.request.contextPath}/main">主页</a> </h1>

  </body>
</html>
View Code

login.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>登录页面</title>
</head>
<body>
<h1>登录页面</h1>
<form action="${pageContext.request.contextPath}/login" method="post">
    <div>
        用户名:<input type="text" name="username" required/>
    </div>
    <div>
        密码<input type="text" name="password" required/>
    </div>
    <input type="submit" value="提交">
</form>
</body>
</html>
View Code

main.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>主页</title>
</head>
<body>
这里是用户登录成功后展示的主页!
<%--注销--%>
<p>
    <a href="${pageContext.request.contextPath}/logout">注销用户</a>
</p>
</body>
</html>
View Code

LoginController

@Controller
public class LoginController {
    //处理跳转到main.jsp的前端请求
    @RequestMapping("/main")
    public  String main(){
        return "main";
    }
    //处理首页用户点击登录时候跳转页面操作
    @RequestMapping("/goLogin")
    public String goLogin(){
        return "login";//去到login.jsp
    }

//处理用户提交表单后操作
    @RequestMapping("/login")
    public String login(HttpSession session,String username,String password){
        System.out.println("login==>"+username);
        //把用户信息放在session中
        session.setAttribute("userLoginInfo",username);//键,值
        return "main";
    }

}
View Code
LoginInterceptor
自定义LoginInterceptor这个拦截器的作用就是用户首次要去访问网站,
直接点击首页会被拦截并跳转到登录页面,登录成功后(session有记录)方可直接来到首页不被拦截
//LoginInterceptor这个拦截器的作用就是用户首次要去访问网站,
// 直接点击首页会被拦截并跳转到登录页面,登录成功后(session有记录)方可直接来到首页不被拦截
public class LoginInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        HttpSession session=request.getSession();
        if(request.getRequestURI().contains("goLogin")){
            return true;
        }
        if(request.getRequestURI().contains("login")){
            return true;
        }
        //要先允许用户第一次登录才能记录session,一次用户第一次登录放行
        if(session.getAttribute("userLoginInfo")!=null){
            return  true;
        }
        
        request.getRequestDispatcher("/WEB-INF/jsp/login.jsp").forward(request,response);
        return false;
    }
}
View Code

同时注意点:因为拦截器Interceptor是springmvc特有的功能,因此需要注册

  <mvc:interceptors>
        <mvc:interceptor>
            <mvc:mapping path="/**"/>
            <bean class="com.lian.config.MyInterceptor"/>

        </mvc:interceptor>
        <mvc:interceptor>
            <mvc:mapping path="/**"/>
            <bean class="com.lian.config.LoginInterceptor"/>
        </mvc:interceptor>
    </mvc:interceptors>
View Code

测试2登录验证:
题目:用户在注销后,需要重新登录账号才能进入用户主页
思路:
main.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>主页</title>
</head>
<body>
这里是用户登录成功后展示的主页!
<%--注销--%>
<p>
    <a href="${pageContext.request.contextPath}/logout">注销用户</a>
</p>
</body>
</html>
View Code

在controller层增加处理注销请求的代码

@Controller
public class LoginController {
    //处理跳转到main.jsp的前端请求
    @RequestMapping("/main")
    public  String main(){
        return "main";
    }
    //处理首页用户点击登录时候跳转页面操作
    @RequestMapping("/goLogin")
    public String goLogin(){
        return "login";//去到login.jsp
    }

    @RequestMapping("/login")
    public String login(HttpSession session,String username,String password){
        System.out.println("login==>"+username);
        //把用户信息放在session中
        session.setAttribute("userLoginInfo",username);//键,值
        return "main";
    }
    @RequestMapping("/logout")
    public String  logout(HttpSession session){
        //System.out.println("logout==>"+username);
        session.removeAttribute("userLoginInfo");
        return "main";
    }
}
View Code

总结:理解拦截器的思想,拦截的是哪一个步骤,拦截逻辑以及注册拦截器

标签:拦截器,登录,springmvc,用户,session,jsp,login,main
From: https://www.cnblogs.com/MyBlogs-joyiyii/p/17363971.html

相关文章

  • 文件上传下载-SpringMvc
    进行文件上传时,表单需要做的准备:1.请求方式为POST:<formaction=”uploadServlet”method=”post”/>2.使用file的表单域:<inputtype=”file”name=”file”/>3.使用multipart/form-data的请求编码方式:<formaction=”uploadServlet”type=”file”name=”file”metho......
  • springboot自定义拦截器
    springboot自定义拦截器操作说明1、编写一个拦截器实现HandlerInterceptor接口2、拦截器注册到容器中(实现WebMvcConfigures的addInterceptors)3、指定拦截规则(如果是拦截所有,静态资源也会被拦截)LoginInterceptor.javapackagecom.example.springtxiangmu.interceptor;im......
  • SpringMVC01_MVC的执行和注解开发
    一、SpringMVC概述​ SpringMVC是Spring框架的一个模块,因此SpringMVC无需和Spring进行整合就可以使用。SpringMVC是一个基于MVC的Web框架,即SpringWebMVC。SpringWebMVC和Struts2都属于表现层的框架,它是Spring框架的一部分。​<!--引入Spring框架的We......
  • ai问答:使用 Vue3 组合式API 和 TS 配置 axios 拦截器 http错误状态
    通过axios.create()可以创建一个axios实例axiosInstance,参数如下:baseURL:请求前缀timeout:超时时间headers:请求头默认配置:import{defineComponent}from'vue'importaxiosfrom'axios'exportdefaultdefineComponent({setup(){//实例-默认配置......
  • spring boot 过滤器、拦截器的区别和使用
    区别:一、过滤器与拦截器的对比1.使用范围不同:过滤器是基于Servlet,而拦截器是基于Spring的,Spring框架底层又离不开Servlet,所以过滤器也能在Spring体系中使用。2.使用资源不同:拦截器有Spring的支持,能够方便的向容器中注册对象和使用对象,但是过滤器就不能。3.使用场景不同:灵活性上......
  • 关于爬虫中所用到的请求拦截器和响应拦截器
    1、首先我们看一下,axios的发包axios=require('axios')//导入axios包//用axios发包,then回来的来处理服务器返回的数据(响应头)//then是axios接收后台返回数据的vuejquery//success是的接收后台返回数据ajaxaxios.get('http://httpbin.org/get').then(fun......
  • SpringMVC 框架总结笔记
    第一章初识SpringMVC1.1SpringMVC概述SpringMVC是Spring子框架SpringMVC是Spring为【展现层|表示层|表述层|控制层】提供的基于MVC设计理念的优秀的Web框架,是目前最主流的MVC框架。SpringMVC是非侵入式:可以使用注解让普通java对象,作为请求处理器【Controller】......
  • SpringMvc 数据格式化 & 数据校验
    数据格式化概述对属性对象的输入/输出进行格式化,从其本质上讲依然属于“类型转换”的范畴。Spring在格式化模块中定义了一个实现ConversionService接口的FormattingConversionService实现类,该实现类扩展了GenericConversionService,因此它既具有类型转换的功能,又具有格式......
  • SpringMVC-ssm案例-2023-04-23-2
    Controller其他功能packagecom.feijian.controller;importcom.feijian.pojo.Books;importcom.feijian.service.BookService;importorg.apache.ibatis.annotations.Param;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.b......
  • SpringMVC-ssm案例-2023-04-23
    一、准备工作1.1、搭建普通maven项目,framework的web项目1.2、加载maven依赖:junit-mysql-connector-C3P01                   servlet-jsp/JSTL                 MyBatis  MyBatis-spring  ......