您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
小编给大家分享一下如何使用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.servlet.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 Exception {
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 Map<String,Object>login(User user){
Map<String,Object> map=new HashMap<>();
map.put("code",0);
if(StringUtils.isEmpty(user.getUsername())||StringUtils.isEmpty(user.getPassword())){
map.put("msg","用户或密码为空!");
return map;
}
QueryWrapper<User> 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方法了

以上是“如何使用SpringBoot拦截器实现登录拦截”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。