栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

SpringBoot拦截器实现登录拦截的方法示例

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SpringBoot拦截器实现登录拦截的方法示例

源码

GitHub:https://github.com/291685399/springboot-learning/tree/master/springboot-interceptor01

SpringBoot拦截器可以做什么

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

SpringBoot拦截器实现登录拦截

pom.xml:



  4.0.0
  
    org.springframework.boot
    spring-boot-starter-parent
    2.0.0.RELEASE
    
  
  com.wyj
  springboot-interceptor01
  0.0.1-SNAPSHOT
  springboot-interceptor01
  springboot拦截器

  
    1.8
  

  
    
    
      org.springframework.boot
      spring-boot-starter-web
    
    
      org.springframework.boot
      spring-boot-starter-test
      test
    
    
      org.springframework.boot
      spring-boot-devtools
      runtime
      true
    

    
    
      org.projectlombok
      lombok
      true
    

    
    
      org.springframework.boot
      spring-boot-starter-thymeleaf
    
  

  
    springboot-interceptor01
    
      
 org.springframework.boot
 spring-boot-maven-plugin
      
    
  

WebMvcConfigurer:继承WebMvcConfigurationSupport类,重写addInterceptors方法


@Configuration
public class WebMvcConfigurer extends WebMvcConfigurationSupport {

  
//  @Override
//  public void addInterceptors(InterceptorRegistry registry) {
//    
//    registry.addInterceptor(new AuthorityInterceptor())
// .addPathPatterns("/user
//  @Override
//  public void addInterceptors(InterceptorRegistry registry) {
//    
//    registry.addInterceptor(new AuthorityInterceptor())
// .addPathPatterns("/user
  @Override
  protected void addInterceptors(InterceptorRegistry registry) {
    
    registry.addInterceptor(new AuthorityInterceptor())
 .addPathPatterns("/user
  @Override
  public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
 Object object) throws Exception {
    String uri = request.getRequestURI();
    if (NOT_INTERCEPT_URI.contains(uri)) {
      log.info("不拦截" + uri);
      return true;
    }
    log.info("拦截" + uri);
    HttpSession session = request.getSession();
    UserInfo userInfo = (UserInfo) session.getAttribute("user_info_in_the_session");
    if (userInfo == null) {
      throw new RuntimeException("用户未登陆");
    }
    return true;
  }

  
  @Override
  public void postHandle(HttpServletRequest request, HttpServletResponse response, Object object, ModelAndView mv) throws Exception {
  }

  
  @Override
  public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object object, Exception ex) throws Exception {
  }
}

UserController:

@Controller
@RequestMapping(value = "/user")
public class UserController {

  @RequestMapping(value = "/login.html")
  public String index() {
    return "login";
  }

  @RequestMapping(value = "/login")
  public String login(User user) {
    //查询数据库,我这里直接写死
    User dbUser = new User(1, "zhangsan", "123456", "admin");
    if (dbUser.getPassword().equals(user.getPassword())) {
      UserInfo userInfo = new UserInfo(dbUser.getId(), dbUser.getUsername(), dbUser.getRole());
      HttpSession session = getRequest().getSession();
      session.setAttribute("user_info_in_the_session", userInfo);
      return "admin";
    }
    return "login";
  }

  @RequestMapping(value = "/userInfo")
  @ResponseBody
  public String userInfo() {
    HttpSession session = getRequest().getSession();
    UserInfo userInfo = (UserInfo) session.getAttribute("user_info_in_the_session");
    return userInfo.toString();
  }

  private HttpServletRequest getRequest() {
    return ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest();
  }
}

User:

@Data
@NoArgsConstructor
@AllArgsConstructor
public class User implements Serializable {

  private int id;
  private String username;
  private String password;
  private String role;

}

UserInfo: 用于存在用户信息储存在session中

@Data
@NoArgsConstructor
@AllArgsConstructor
public class UserInfo implements Serializable {

  private int id;
  private String username; 
  private String role;

}

login.html:只是一个很简单的登录表单




  
  登陆页面




admin.html:




  
  首页





以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持考高分网。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/137020.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号