SpringBoot拦截器实现登录拦截的示例代码

网友投稿 1163 2022-10-17

SpringBoot-实现登录拦截的示例代码

SpringBoot-实现登录拦截的示例代码

可以对URL路径进行拦截,可以用于权限验证、解决乱码、操作日志记录、性能监控、异常处理等

实现代码

新建 interceptor包

添加-代码

package com.qcby.interceptor;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.web.method.HandlerMethod;

import org.springframework.web.servlet.HandlerInterceptor;

import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;

import javax.servlethttp://.http.HttpServletResponse;

import javax.servlet.http.HttpSession;

public class LoginInterceptor implements HandlerInterceptor {

@Autowired

private HttpSession httpSession;

//Controller逻辑执行之前

@Override

public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

System.out.println("preHandle....");

String uri = request.getRequestURI();

System.out.println("当前路径"+uri);

/**

* HandlerMethod=>Controller中标注@RequestMapping的方法

* 需要配置静态资源不拦截时,添加这块逻辑 => 前后端分离项目

*/

if (!(handler instanceof HandlerMethod)) {

return true;

}

if (httpSession.getAttribute("username") == null) {

// 未登录跳转到登录界面

throw new RuntimeException("no login!");

} else {

return true;

}

}

//Controller逻辑执行完毕但是视图解析器还未进行解析之前

@Override

public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {

System.out.println("postHandle....");

}

//Controller逻辑和视图解析器执行完毕

@Override

public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Ehttp://xception {

System.out.println("afterCompletion....");

}

}

注册,配置拦截路径和排除登录需访问路径

package com.qcby.config;

import com.qcby.interceptor.LoginInterceptor;

import org.springframework.context.annotation.Bean;

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 WebMvcConfig implements WebMvcConfigurer {

@Override

public void addInterceptors(InterceptorRegistry registry) {

registry.addInterceptor(loginInterceptor())

.addPathPatterns("/**")

// 那些路径不拦截

.excludePathPatterns("/user/login","/error");

}

@Bean

public LoginInterceptor loginInterceptor(){

return new LoginInterceptor();

}

}

实现类

@RestController

@RequestMapping("user")

public class UserController {

@Autowired

private UserService userService;

@Autowired

private HttpSession session;

@ApiOperation("用户登录接口")

@RequestMapping(value="login",method = {RequestMethod.GET,RequestMethod.POST})

public Maplogin(User user){

Map map=new HashMap<>();

map.put("code",0);

if(StringUtils.isEmpty(user.getUsername())||StriniiEFdgUtils.isEmpty(user.getPassword())){

map.put("msg","用户或密码为空!");

return map;

}

QueryWrapper queryWrapper=new QueryWrapper<>();

queryWrapper.eq("username",user.getUsername())

.eq("password",user.getPassword());

User user1=userService.getOne(queryWrapper);

if(user1!=null){

map.put("cod",1);

map.put("data",user1);

session.setAttribute("username",user1.getUsername());

}else {

map.put("msg","用户名或密码错误!");

}

return map;

}

}

当我们未登录时我们不能进入拦截的页面

登录

登录之后我们就能进入hello方法了

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Zikstrap- Metro风格CSS框架
下一篇:SpringBoot2.x 操作 Redis 数据
相关文章

 发表评论

暂时没有评论,来抢沙发吧~