首页 > 其他分享 >在登录上运用拦截器

在登录上运用拦截器

时间:2022-11-03 12:02:55浏览次数:41  
标签:拦截器 登录 user import 运用 servlet public 页面

简述:跟着狂神学Java,使用SpringMVC的拦截器,敲的一个小demo,主要理解拦截器的使用。

也可以去看看狂神的笔记   https://www.kuangstudy.com/zl/ssm#header3

拦截器

  • 拦截器是SpringMVC框架自己的,只有使用了SpringMVC框架的工程才能使用
  • 拦截器只会拦截访问的控制器方法, 如果访问的是jsp/html/css/image/js是不会进行拦截的

过滤器与拦截器的区别:拦截器是AOP思想的具体应用。

实现思路

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

所使用到的配置:tomcat 9.0.68服务器、MAVEN 3.6.3、IDEA 2021.1、IE浏览器

配置的jar包

    <dependencies>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>4.0.1</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>javax.servlet.jsp-api</artifactId>
            <version>2.3.3</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp.jstl</groupId>
            <artifactId>jstl-api</artifactId>
            <version>1.2</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.3.18</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.10</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.24</version>
        </dependency>

 

编写一个登陆页面 login.jsp

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

创建用户实体类 user.java

package com.guan.dao;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
    private String username;
    private String passwd;
}

 

编写一个Controller处理请求 LoginController.java

 1 package com.guan.controller;
 2 
 3 import com.guan.dao.User;
 4 import org.springframework.stereotype.Controller;
 5 import org.springframework.ui.Model;
 6 import org.springframework.web.bind.annotation.RequestMapping;
 7 
 8 import javax.servlet.http.HttpSession;
 9 
10 @Controller
11 @RequestMapping("/user")
12 public class LoginController {
13 
14     //跳转到登录页面
15     @RequestMapping("/jumplogin")
16     public String jumpLogin(){
17         return "login";
18     }
19     //跳转到首页
20     @RequestMapping("/jumpsuccess")
21     public String jumpsuccess(){
22         return "success";
23     }
24     //登陆提交
25     @RequestMapping("/login")
26     public String lgoin(HttpSession session, User user, Model model){
27         System.out.println("接收前端的数据==="+user);
28         //session记录用户信息
29         model.addAttribute("user",user);
30         session.setAttribute("user",user);
31         return "success";
32     }
33     //退出登录
34     @RequestMapping("/out")
35     public String loginout(HttpSession session){
36         session.removeAttribute("user");
37         return "login";
38     }
39 }

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

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

${user}

<a href="${pageContext.request.contextPath}/user/out">退出登录</a>
</body>
</html>

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

<%@ 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>

编写用户登录拦截器 MyInterceptor.java

 1 package com.guan.config;
 2 
 3 import org.springframework.web.servlet.HandlerInterceptor;
 4 import org.springframework.web.servlet.ModelAndView;
 5 
 6 import javax.servlet.http.HttpServletRequest;
 7 import javax.servlet.http.HttpServletResponse;
 8 import javax.servlet.http.HttpSession;
 9 
10 public class MyInterceptor implements HandlerInterceptor {
11     @Override
12     public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
13         System.out.println("处理前===============");
14         // 如果是登陆页面则放行
15         if (request.getRequestURI().contains("login")){
16             return true;
17         }
18         // 用户没有登陆跳转到登陆页面
19         HttpSession session = request.getSession();
20         if (session.getAttribute("user") !=null){
21             return true;
22         }
23         // 用户没有登陆跳转到登陆页面
24         request.getRequestDispatcher("/WEB-INF/jsp/login.jsp").forward(request,response);
25         return false;  // 关闭拦截器
26         //return false;  开启拦截器
27     }
28 
29     @Override
30     public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
31         System.out.println("处理后===============");
32         HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
33 
34     }
35 
36     @Override
37     public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
38         System.out.println("清理=================");
39         HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
40     }
41 }

在Springmvc的配置文件中注册拦截器

<!--    拦截器配置-->
    <mvc:interceptors>
        <mvc:interceptor>
<!--            所有请求-->
            <mvc:mapping path="/**"/>
            <bean class="com.guan.config.MyInterceptor"/>
        </mvc:interceptor>
    </mvc:interceptors>

 

标签:拦截器,登录,user,import,运用,servlet,public,页面
From: https://www.cnblogs.com/mo-de/p/16853982.html

相关文章

  • 如何登录设备(睿易篇)
    大家好,我是小杜,经过这几天的学习,已经基本了解了产品类别以及一些基本功能,我觉得我已经可以了,但师傅认为我的水平还差得远呢,不过也还是同意我到机房接触设备并告知目前......
  • SSH免密码登录
    服务器A如果要免密码登录到服务器B时,需要在服务器A上生成密钥对,再将生成的公钥上传到服务器B上  客户端A生成公私钥:ssh-keygencd~/.sshls上传公钥......
  • net core实现分布式session,单点登录
    原文网址:http://m.tnblog.net/aojiancc2/article/details/2436要想在netcore中实现分布式session,实现单点登录,我们可以把session保存到redis中,这样就可以多个项目共享s......
  • Spring MVC基码整理- 请求参数接收处理、响应、拦截器、上传文件、拦截器、异常处理基
    大家如有疑问和讨论及时留言一、springMVC请求原理图 1.1DispatcherServlet:前端控制器用户请求到达前端控制器,它就相当于mvc模式中的c,dispatcherServ......
  • ABAP-字符串语法综合运用
    *&---------------------------------------------------------------------**&ReportZ10*&*&-----------------------------------------------------------------......
  • SpringBoot笔记:拦截器Interceptor和过滤器Filter
    一、拦截器InterceptorSpringBoot中定义拦截器与MVC中是一样的,区别在于拦截器的配置,MVC是配置在配置文件中的,SpringBoot中则是配置在配置类中的。(SpringBoot中的配置类需......
  • 从web2的用户名密码登录到web3的钱包签名认证
    Web2都有哪些常用的认证场景 早期我们使用网页类Web2应用时,大多采用账号+密码的认证方式访问。为了方便很多网站设置的都是相同的密码(这很不安全)。随着移动应用的......
  • 谷歌云 root用户密码登录
    谷歌云root用户密码登录一、利用密钥登录系统,先修改root用户密码。sudopasswdroot然后会提示你输入newpassword。输入一个你要设置的root的密码,然后再输入一遍进......
  • ModStartCMS v5.1.0 数据采集接口,登录自动注册
    系统介绍ModStart是一个基于Laravel模块化极速开发框架。模块市场拥有丰富的功能应用,支持后台一键快速安装,让开发者能快的实现业务功能开发。系统完全开源,基于Apache2.......
  • vmware esxi 用户名(账号)密码明明正确,网页却无法登录管理后台的解决办法
    原文链接:https://zhuanlan.zhihu.com/p/462276300 相信使用过VmwareEsxi虚拟系统的网友们可能都偶尔遇到过,明明vmwareesxi用户名密码是正确的,管理网页却无法登录管......