学习的知识点整理(持续更新中~~~)

学习的知识点

1、Springboot静态资源映射

  • 由来

    • Springboot项目的资源在resource下无法直接访问,只有在templates和static目录下才可以访问,所以需要写一个配置类
  • 解决方法

    • 写一个WebMvcConfig,继承WebMvcConfigurationSupport,重写addResourceHandlers,参数的addResourceHandler方法是访问的路径,参数的addResourceLocations方法是将前面这个访问的路径换成访问项目下的路径
  • 代码

    • @Slf4j
      @Configuration
      public class WebMvcConfig extends WebMvcConfigurationSupport {
          /**
           * 设置静态资源映射
           * @param registry
           */
          @Override
          protected void addResourceHandlers(ResourceHandlerRegistry registry) {
              log.info("开始进行静态资源映射!!!");
              registry.addResourceHandler("/backend/**").addResourceLocations("classpath:/backend/");
              registry.addResourceHandler("/front/**").addResourceLocations("classpath:/front/");
          }
      }
      

2、SpringbootMD5加密

  • 由来

    • 数据库里的密码通常不是明文密码,所以要进行加密,MD加密是众多之一的一种
  • 解决方法

    • Springboot自带的DigestUtils类直接使用他的静态方法即可
  • 代码

    • DigestUtils.md5DigestAsHex("123456".getBytes())
      

3、异常处理方法

  • 由来

    • 因为有些异常我们需要捕获而不是让他直接挂掉,捕获到之后通过需求展示出相应的结果
  • 解决方法

    • 编写一个GlobalExceptionHandler,在里面捕获对应的异常方法
  • 代码

    • @ControllerAdvice(annotations = {RestController.class,Controller.class})
      @ResponseBody
      @Slf4j
      public class GlobalExceptionHandler {
          /**
           * 异常处理方法
           * @param ex
           * @return
           */
          @ExceptionHandler(SQLIntegrityConstraintViolationException.class)
          public R<String> exceptionHandler(SQLIntegrityConstraintViolationException ex){
              log.error(ex.getMessage());
      
              if(ex.getMessage().contains("Duplicate entry")){
                  String[] split = ex.getMessage().split(" ");
                  String msg = split[2] + "已存在";
                  return R.error(msg);
              }
              return R.error("未知错误");
          }
      }
      

4、分页处理

  • 由来

    • 因为大部分的后台页面都是管理,需要多条数据,这时候就不得不使用分页功能
  • 解决方法

    • 导入mybatisplus包
    • 这里mybatisplus给我们提供了一些方法(pagehelper也好用)
    • 编写一个配置类MybatisPlusConfig,因为是组件所以主启动类要加上ServletComponentScan注解扫描它
  • 代码

    • @Configuration
      public class MybatisPlusConfig {
          @Bean
          public MybatisPlusInterceptor mybatisPlusInterceptor(){
              MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
              mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor());
              return mybatisPlusInterceptor;
          }
      }
      
    • @GetMapping("/page")
      public R<Page> page(int page,int pageSize,String name){
          log.info("page = {},pageSize = {},name = {}",page,pageSize,name);
          //分页构造器
          Page pageInfo = new Page(page,pageSize);
          //条件构造器
          LambdaQueryWrapper<Employee> queryWrapper = new LambdaQueryWrapper<>();
          //过滤条件
          queryWrapper.like(StringUtils.isNotEmpty(name),Employee::getName,name);
          //排序条件
          queryWrapper.orderByDesc(Employee::getUpdateTime);
          //执行查询
          employeeService.page(pageInfo,queryWrapper);
          return R.success(pageInfo);
      }
      

5、过滤器使用

  • 由来

    • 一些页面未授权不能让请求直接访问,所以这时就需要拦截器
  • 解决方法

    • 编写一个拦截器LoginCheckFilter
    • 这里用到了AntPathMatcher,一般定义成常量,match方法一般用来判断一个字符串在不在一个字符串数组里
  • 代码

    • @WebFilter(filterName = "LoginCheckFilter",urlPatterns = "/*")
      @Slf4j
      public class LoginCheckFilter implements Filter {
      
          private static final AntPathMatcher PATH_MATCHER = new AntPathMatcher();
      
          @Override
          public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
              HttpServletRequest request = (HttpServletRequest) servletRequest;
              HttpServletResponse response = (HttpServletResponse) servletResponse;
      
              //1、获取本次请求的url
              String requestURI = request.getRequestURI();
              //定义不需要处理的请求路径
              String[] urls = new String[]{
                      "/employee/login",
                      "/employee/logout",
                      "/backend/**",
                      "/front/**"
              };
              //2、判断本次请求是否需要处理
              boolean check = check(urls,requestURI);
              //3、如果不需要处理,则直接放行
              if(check){
                  log.info("本次请求{}不需要处理",requestURI);
                  filterChain.doFilter(request,response);
                  return;
              }
              //4、判断登录状态,如果已登录,则直接放行
              if(request.getSession().getAttribute("employee") != null){
                  log.info("用户已登录,用户id为{}",request.getSession().getAttribute("employee"));
                  filterChain.doFilter(request,response);
                  return;
              }
              //5、如果未登录则返回未登录结果,通过输出流方式向客户端页面响应数据
              log.info("用户未登录");
              response.getWriter().write(JSON.toJSONString(R.error("NOTLOGIN")));
          }
          
          public boolean check(String[] urls,String requestURI){
              for (String url : urls) {
                  boolean match = PATH_MATCHER.match(url, requestURI);
                  if(match){
                      return true;
                  }
              }
              return false;
          }
      
      }
      

6、

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值