springboot整合拦截器,登录验证
定义拦截器
拦截器与spring mvc拦截器实现方式一致,继承HandlerInterceptorAdapter类,代码如下
package com.xiaomin.springboot_login.interceptor;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
* @author 晓敏
* @create 2020-03-16 16:26
*/
@Configuration
public class LoginInterceptor extends HandlerInterceptorAdapter {
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("拦截你");
String uri = request.getRequestURI();
System.out.println(uri);
if(uri.equals("/login2")|| uri.equals("/tologin")){
return true;
}
HttpSession session = request.getSession();
Object user = session.getAttribute("user");
if(user!=null){
return true;
}
request.getRequestDispatcher("/WEB-INF/jsp/login.jsp").forward(request, response);
return false;
}
}
定义配置类
package com.xiaomin.springboot_login.config;
import com.xiaomin.springboot_login.interceptor.LoginInterceptor;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
/**
* @author 晓敏
* @create 2020-03-16 16:58
*/
@Configuration
public class WebMvcConfigurer extends WebMvcConfigurationSupport {
@Override
protected void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new LoginInterceptor()).addPathPatterns("/**");
}
}
登录页
<%--
Created by IntelliJ IDEA.
User: Administrator
Date: 2020-3-16
Time: 16:20
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h1>登录</h1>
<form action="/login2" method="post">
账号:<input type="text" name="username"/><br/>
密码:<input type="password" name="password"/><br/>
<input type="submit" value="提交"/>
</form>
</body>
</html>
LoginController控制器
@RequestMapping("/login2")
public void login2(HttpServletRequest request, HttpServletResponse response,String username, String password) throws Exception{
if(username=="" || password==""){
throw new UserException("用户名或密码为空");
}
User user = userService.getOne(new QueryWrapper<User>().eq("username", username));
if(user==null){
throw new UserException("用户不存在");
}
if(!password.equals(user.getPassword())){
throw new UserException("密码错误");
}
request.getSession().setAttribute("user",user);
request.setAttribute("username",user.getUsername());
request.getRequestDispatcher("/WEB-INF/jsp/success.jsp").forward(request,response);
}
注意事项
因为配置了拦截器,需要在springboot启动器上添加这个,不然访问不到页面
/**
* 配置JSP视图解析器
* 如果没有配置视图解析器。Spring会使用BeanNameViewResolver,通过查找ID与逻辑视图名称匹配且实现了View接口的beans
*
* @return
*/
@Bean
public InternalResourceViewResolver setupViewResolver() {
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
//设置视图路径的前缀
resolver.setPrefix("/WEB-INF/jsp/");
//设置视图路径的后缀
resolver.setSuffix(".jsp");
return resolver;
}
目录结构
演示结果
退出系统后直接去首页,被拦截,打回登录页喽,拦截器案例成功。