目录
一 相关配置
1 登录拦截器
package com.ckf.springbootinterceptor.config;
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.util.ArrayList;
import java.util.List;
/**
* @className: LoginInterceptor
* @description: 登录拦截器
* @date: 2020/6/16
* @author: cakin
*/
public class LoginInterceptor implements HandlerInterceptor {
/**
* 用于存储排除拦截的url (登录/login.html, /css,/js,/img)
*/
private List<String> urls = new ArrayList<>();
/**
* 功能描述:进入控制器之前拦截
*
* @param request 请求
* @param response 响应
* @param handler 处理
* @return boolean 是否放行
* @author cakin
* @date 2020/6/16
*/
@Override
public boolean preHandle( HttpServletRequest request, HttpServletResponse response, Object handler ) throws Exception {
HttpSession session = request.getSession();
if (session.getAttribute("username") != null) {
// 已登录,放行。。
return true;
} else {
System.out.println("你还没登录,没有权限");
// 未登录,拦截 返回login
response.sendRedirect("/login");
return false;
}
}
/**
* 功能描述:设置能通过的url
*
* @return List<String>
* @author cakin
* @date 2020/6/16
*/
public List<String> getUrls() {
urls.add("/login"); // login url请求
urls.add("/doLogin"); // 登录请求
urls.add("/no_login");
urls.add("/swagger-ui.html");
// 静态资源
urls.add("/img/*");
urls.add("/js/*");
urls.add("/css/*");
return urls;
}
}
2 Swagger配置
package com.ckf.springbootinterceptor.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
/**
* @className: SwaggerConfig
* @description: Swagger的配置
* @date: 2020/6/16
* @author: cakin
*/
@Configuration
@EnableSwagger2 // 开启swagger
public class SwaggerConfig {
/**
* 配置Swagger信息
* http://localhost:8080/swagger-ui.html 请求路径
* 扫描控制器的包
*
* @return Docket
*/
@Bean
public Docket createDocketApi() {
return new Docket(DocumentationType.SWAGGER_2).pathMapping("/").select().apis(RequestHandlerSelectors.basePackage("com.ckf"))
.paths(PathSelectors.any())
.build().apiInfo(new ApiInfoBuilder()
.title("拦截系统项目 API 文档")
.description("演示SpringBoot整合Swagger...")
.version("2.2.3")
.contact(new Contact("cakin", "https://blog.csdn.net/chengqiuming", "798103175@qq.com"))
.license("The Apache License")
.licenseUrl("https://blog.csdn.net/chengqiuming")
.build());
}
}
3 MVC配置
package com.ckf.springbootinterceptor.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
/**
* @className: WebappAdrapter
* @description: 注册拦截器配置类
* @date: 2020/6/16
* @author: cakin
*/
@Configuration
public class WebappAdapter implements WebMvcConfigurer {
/**
* @className: WebappAdapter
* @description: 将登录拦截器添加进来
* addPathPatterns()添加拦截
* excludePathPatterns()排除拦截
* @date: 2020/6/16
* @author: cakin
*/
@Override
public void addInterceptors( InterceptorRegistry registry ) {
// 实例化登录拦截器,用于注册
LoginInterceptor loginInterceptor = new LoginInterceptor();
/***
* 所有路径都被拦截 addPathPatterns("/**")
* 允许通过 excludePathPatterns("/login", "/register")等等
*/
registry.addInterceptor(loginInterceptor).addPathPatterns("/**")
.excludePathPatterns("/swagger-resources/**")
.excludePathPatterns(loginInterceptor.getUrls());
WebMvcConfigurer.super.addInterceptors(registry);
}
}
二 控制器
package com.ckf.springbootinterceptor.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import javax.servlet.http.HttpSession;
/**
* @className: LoginController
* @description: 登录控制器
* @date: 2020/6/16
* @author: cakin
*/
@Controller
public class LoginController {
/**
* 功能描述:用户登录
*
* @param userName 用户名
* @param password 密码
* @param session session
* @return String 登录页
* @author cakin
* @date 2020/6/16
*/
@PostMapping("/doLogin")
public String login( String userName, String password, HttpSession session ) {
if (userName.equals("admin") && password.equals("123456")) {
session.setAttribute("username", userName);
//登录成功返回index 否则返回登录
return "index";
}
return "login";
}
/**
* 功能描述:显示登录页
*
* @author cakin
* @date 2020/6/16
* @return String 登录页
*/
@GetMapping("/login")
public String loginView() {
return "login";
}
/**
* 功能描述:显示非法登录页
*
* @author cakin
* @date 2020/6/16
* @return String 非法页面
*/
@GetMapping("/no_login")
public String noLogin() {
return "no_login";
}
/**
* 功能描述:显示订单页
*
* @author cakin
* @date 2020/6/16
* @return String 订单页
*/
@GetMapping("/orders")
public String orders() {
return "orders";
}
/**
* 功能描述:显示用户页
*
* @author cakin
* @date 2020/6/16
* @return String 用户页
*/
@GetMapping("/user")
public String user() {
return "user";
}
}
三 视图
1 index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
测试1
</body>
</html>
2 login.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>登录</title>
</head>
<body>
<form action="/doLogin" method="post">
用户名:<input type="text" name="userName"/>
密码:<input type="password" name="password"/>
<input type="submit" value="登录">
</form>
</body>
</html>
3 no_login.html
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<span th:text="${session.username}"></span>用户还没登录,没有权限访问!!
<p>
<a href="/login">返回登录</a>
</p>
</body>
</html>
4 orders.html
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>订单页面</title>
</head>
<body>
<h1>欢迎来到订单系统</h1>
</body>
</html>
5 user.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>欢迎来到用户管理</h1>
</body>
</html>