SpringBoot拦截器
创建数据库
Entity
package com.example.fuxi.Entity;
public class User {
private int id;
private String username;
private String password;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
Mapper
package com.example.fuxi.Mapper;
import com.example.fuxi.Entity.User;
import org.springframework.stereotype.Repository;
@Repository
public interface UserMapper {
User Sel(int id);
User login(String username,String password);
int register(User user);
}
Mapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.example.fuxi.Mapper.UserMapper">
<resultMap id="ClassesResult" type="com.example.fuxi.Entity.User">
<result property="id" column="id"/>
<result property="username" column="username"/>
<result property="password" column="password"/>
</resultMap>
<select id="Sel" resultType="com.example.fuxi.Entity.User">
select * from user where id = #{id}
</select>
<select id="login" resultType="com.example.fuxi.Entity.User">
SELECT * FROM user where username = #{param1} and password = #{param2}
</select>
<insert id="register" parameterType="com.example.fuxi.Entity.User">
INSERT INTO user (username, password) VALUES (#{username}, #{password})
</insert>
</mapper>
Service
package com.example.fuxi.Service;
import com.example.fuxi.Entity.User;
public interface UserService {
User Sel(int id);
User login(String username,String password);
int register(User user);
}
ServiceImpl
package com.example.fuxi.Service.ServiceImpl;
import com.example.fuxi.Entity.User;
import com.example.fuxi.Mapper.UserMapper;
import com.example.fuxi.Service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
@Override
public User Sel(int id){
return userMapper.Sel(id);
}
public User login(String username, String password) {
return userMapper.login(username,password);
}
public int register(User user) {
return userMapper.register(user);
}
}
Controller
package com.example.fuxi.Controller;
import com.example.fuxi.Entity.User;
import com.example.fuxi.Service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@Controller
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
//跳转首页(登录页)
@RequestMapping("/toIndex")
public String show(){
return "index";
}
@RequestMapping("/toIndexs")
public String showd(){
return "toIndexs";
}
//登录操作
@RequestMapping("/loginUser")
public String login(User user, HttpServletRequest request) {
String username = user.getUsername();
String password = user.getPassword();
User u1 = userService.login(username, password);
if (u1 == null) {
return "redirect:/user/toIndexs";
} else {
request.getSession().setAttribute("session_user", user);//登录成功后将用户放入session中,用于拦截
// return "登录成功";
return "redirect:/student/index";
}
}
//跳转注册页
@RequestMapping("/toRegister")
public String toRegister(){
return "register";
}
//注册操作
@RequestMapping("/register")
public String register(User user){
int su = userService.register(user);
if(su==0){
System.out.println("----");
}
return "welcome";
}
//测试未登陆拦截页面
@RequestMapping("/welcome")
public String welcome(){
return "welcome";
}
//退出登录
@RequestMapping("/outUser")
public void outUser(HttpServletRequest request, HttpServletResponse response) throws IOException {
request.getSession().removeAttribute("session_user");
response.sendRedirect("/user/toIndex");
}
}
创建一个工具包
SessionInterceptor
package com.example.fuxi.intercetor;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import java.util.ArrayList;
import java.util.List;
@Configuration
public class SessionInterceptor implements WebMvcConfigurer {
/**
* 自定义拦截器,添加拦截路径和排除拦截路径
* addPathPatterns():添加需要拦截的路径
* excludePathPatterns():添加不需要拦截的路径
*/
//注册拦截器
@Override
public void addInterceptors(InterceptorRegistry registry) {
List list = new ArrayList();
list.add("/user/toIndex");
list.add("/user/loginUser");
list.add("/user/toRegister");
list.add("/user/register");
list.add("/user/toIndexs");
registry.addInterceptor(new UserInterceptor()).addPathPatterns("/**").excludePathPatterns(list);
}
}
UserInterceptor
package com.example.fuxi.intercetor;
import com.example.fuxi.Entity.User;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@Component
public class UserInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws IOException {
System.out.println("执行到了preHandle方法");
System.out.println(handler);
User user = (User) request.getSession().getAttribute("session_user");
if (user==null){
response.sendRedirect(request.getContextPath()+"/user/toIndex");//拦截后跳转的方法
System.out.println("已成功拦截并转发跳转");
return false;
}
System.out.println("合格不需要拦截,放行");
return true;
}
// * 处理请求完成后视图渲染之前的处理操作
// * 通过ModelAndView参数改变显示的视图,或发往视图的方法
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) {
System.out.println("执行了postHandle方法");
}
// * 视图渲染之后的操作
//
@Override
public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3) throws Exception {
System.out.println("执行到了afterCompletion方法");
}
}
拦截后的登录页面 index
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<style type="text/css">
body{
background:url(/imctemp-rainy/11.jpg) no-repeat center center;
background-size:cover;
background-attachment:fixed;
background-color:#CCCCCC;
color: aquamarine;
line-height:50px;
text-align: center;
}
</style>
<title>Title</title>
</head>
<body>
<form action="/user/loginUser" method="post" >
请输入用户名进行登录--:<input type="text" name="username" id="userName"/><br>
请你输入密码进行登录--:<input type="password" name="password" id="passWord"/><br>
<input type="submit" value="登录验证"/>
<a href="/user/toRegister">--注册--</a>
</form>
</body>
</html>
注册缠账号密码页面 register
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="/user/register" method="post">
请输入用户名--:<input type="text" name="username" id="userName"/><br>
请你输入密码--:<input type="password" name="password" id="passWord"/><br>
<input type="submit" value="Register"/>
</form>
</body>
</html>
注册完后的跳转页面 welcome
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
注册或登录后才能看到的界面
<a href="/user/outUser">退出登录</a>
</body>
</html>