SpringBoot图文并茂讲解登录拦截器
1.相关概念
1.实现效果
当没有输入正确的账号密码登录成功时, 除了登录页,其他页面都无法访问(静态资源要放行)
2.实现步骤
- 编写一个拦截器实现HandlerInterceptor接口
- 拦截器注册到容器中(实现WebMvcConfigurer的addInterceptors())
- 指定拦截规则(注意,如果是拦截所有,静态资源也会被拦截)
2.代码实现
1.配置文件
pom.xml
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.7.0</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.limi</groupId> <artifactId>springboot-test2</artifactId> <version>0.0.1-SNAPSHOT</version> <name>springboot-test2</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>true</optional> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <excludes> <exclude> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </exclude> </excludes> </configuration> </plugin> <!-- 下面插件作用是工程打包时,不将spring-boot-configuration-processor打进包内,让其只在编码的时候有用 --> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <excludes> <exclude> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> </exclude> </excludes> </configuration> </plugin> </plugins> </build> </project>
application.properties
server.port=8080
2.java代码
SpringbootTest2Application
package com.limi.springboottest2; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.ConfigurableApplicationContext; @SpringBootApplication public class SpringbootTest2Application { public static void main(String[] args) { //1、返回我们IOC容器 ConfigurableApplicationContext run = SpringApplication.run(SpringbootTest2Application.class, args); } }
LoginInterceptor
package com.limi.springboottest2.interceptor; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; public class LoginInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println("=========LoginInterceptor preHandle=========="); HttpSession session = request.getSession(); if(session.getAttribute("username")==null) //未登录 { //未登录, 重定向到登录页 response.sendRedirect("/index"); //重定向到登录controller return false;//拦截 } return true; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { System.out.println("==========LoginInterceptor postHandle=========="); } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { System.out.println("==========LoginInterceptor afterCompletion=========="); } }
WebConfig
package com.limi.springboottest2.config; import com.limi.springboottest2.interceptor.LoginInterceptor; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @Configuration public class WebConfig implements WebMvcConfigurer { @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new LoginInterceptor())//拦截器注册到容器中 .addPathPatterns("/**") //所有请求都被拦截包括静态资源 .excludePathPatterns("/index", "/login") //放行的网络请求, .excludePathPatterns("/view/index.html","/css/**","/images/**", "/js/**"); //放行的资源请求 } }
HelloController
package com.limi.springboottest2.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpSession; @Controller public class HelloController { @GetMapping("/index") public String index(){ return "/view/index.html"; //没有使用模板引擎, 所以要带上后缀 } @PostMapping("/login") public String login(HttpSession session, String username, String password){ System.out.println("username:"+username+" password:"+password); if("andy".equals(username)&&"123456".equals(password)) { //账号密码匹配成功 session.setAttribute("username", username); return "redirect:/success"; } return "redirect:/index"; } @GetMapping("/success") public ModelAndView test1(HttpSession session){ System.out.println("======执行控制器中方法success======"); String name = (String)session.getAttribute("username"); ModelAndView mv = new ModelAndView(); mv.addObject("name", name); mv.setViewName("/view/success.html"); return mv; } }
3.前端代码
index.css
h1{
color: blueviolet;
}
index.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <link rel="stylesheet" href="./css/index.css" rel="external nofollow" > </head> <body> <h1>请输入账号密码进行登录!</h1> <form action="login" method="post"> 账号<input type="text" name="username"><br> 密码<input type="password" name="password"><br> <input type="submit" value="提交"><br> </form> </body> </html>
success.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <h1>登录成功!</h1> </head> <body> </body> </html>
3.运行测试
1.直接通过网址访问登录成功页面
被重定向到登录页
2.输入错误账号密码
被重定向到登录页
3.输入正确账号密码
到此这篇关于SpringBoot图文并茂讲解登录拦截器的文章就介绍到这了,更多相关SpringBoot登录拦截器内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
详解Spring学习总结——Spring实现AOP的多种方式
这篇文章主要介绍了详解Spring学习总结——Spring实现AOP的多种方式,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧2017-01-01Springboot与vue实例讲解实现前后端分离的人事管理系统
这篇文章主要介绍了如何用Java实现企业人事管理系统,文中采用springboot+vue实现前后端分离,感兴趣的小伙伴可以学习一下2022-06-06手把手带你掌握SpringBoot RabbitMQ延迟队列
RabbitMQ 是一个由Erlang语言开发的AMQP的开源实现,支持多种客户端。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗,下文将带你深入了解 RabbitMQ 延迟队列2021-09-09
最新评论