Springboot过滤器
代码
一:编写mapper
@Repository
public class UserMapper {
private static Map userMap = new HashMap<>();
//初始化数据 模拟数据库
static {
userMap.put("张三", new User(1, "张三", "123"));
userMap.put("jhclass-vx", new User(2, "jhclass-vx", "123456"));
userMap.put("李四", new User(3, "李四", "123678"));
}
public User loginUser(String username, String pwd) {
//根据传入的用户名称查找map值 模拟数据库查询操作
User user = userMap.get(username);
//判断用户是否为空
if (user == null) {
return null;
}
//再次判断用户密码和传入的用户密码是否一致
if (user.getPwd().equals(pwd)) {
return user;
}
return null;
}
}
二:编写UserService
public interface UserService {
/**
* 用户登录
*
* @param username
* @param pwd
* @return
*/
String loginUser(String username, String pwd);
}
三:编写UserServiceImpl实现类
@Service
public class UserServiceImpl implements UserService {
public static Map sessionMap = new HashMap<>();
@Autowired
UserMapper userMapper;
@Override
public String loginUser(String username, String pwd) {
//调用mapper登陆方法 传入用户名称及密码参数
User user = userMapper.loginUser(username, pwd);
if (user == null) {
return null;
} else {
//生成用户token
String token = UUID.randomUUID().toString();
System.out.println(token);
//模拟用户信息存入缓存数据库
sessionMap.put(token, user);
return token;
}
}
}
四:UserController登陆控制层
/**
* 用户控制层
*/
@RestController
@RequestMapping("api/v1/pub/user")
public class UserController {
@Autowired
private UserService userService;
/**
* 用户登录
*
* @param user
* @return
*/
@PostMapping("loginuser")
//@RequestBody:前端开发一般不是form表单形式 而是json形式提过来的
public JsonData loginUser(@RequestBody User user) {
System.out.println("user=" + user.toString());
String token = userService.loginUser(user.getUsername(), user.getPassword());
return token !=null ? JsonData.buildSuccess(token) : JsonData.buildError("账号密码错误");
}
}
六:编写过滤器
/**
* 登陆过滤器
*/
@WebFilter(urlPatterns = "/api/v1/pri/*",filterName = "loginFilter")//需要拦截的路径
public class LoginFilter implements Filter {
/**
* 容器加载初始化
* @param filterConfig
* @throws ServletException
*/
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("int LoginFilter========");
}
/**
* 核心业务逻辑
*/
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("doFilter LoginFilter============");
//转成对应的HttpServletRequest 拿到对应参数值 判断对应token等
HttpServletRequest request = (HttpServletRequest) servletRequest;
//转成对应的HttpServletResponse
HttpServletResponse response = (HttpServletResponse) servletResponse;
//先从请求头里拿token,没有的话就从请求参数里面拿
String token = request.getHeader("token");
if(StringUtils.isEmpty(token)){
token = req.getParameter("token");
}
if(!StringUtils.isEmpty(token)){
//判断token是否合法
User user = UserServiceImpl.sessionMap.get(token);
if(user!=null){
filterChain.doFilter(servletRequest,servletResponse);
}else {
JsonData jsonData = JsonData.buildError("登录失败,token无效",-2);
String jsonStr = objectMapper.writeValueAsString(jsonData);
renderJson(resp,jsonStr);
}
}else {
JsonData jsonData = JsonData.buildError("未登录",-3);
String jsonStr = objectMapper.writeValueAsString(jsonData);
renderJson(resp,jsonStr);
}
/**
* 容器销毁
*/
@Override
public void destroy() {
}
}
七:下单接口
@RestController
@RequestMapping("api/v1/pri/order")
public class VideoOrderController {
@RequestMapping("save")
public JsonData saveOrder(){
return JsonData.buildSuccess("下单成功");
}
}