iyaya

导航

未整理

统一拦截

自定义不被拦截注解

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented //标记注解
public @interface NoAuthorization {
}

统一拦截检查登录状态,配合上边注解使用

@Component
public class TokenInterceptor implements HandlerInterceptor {

    @Autowired
    private AdminService adminService;

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        String method = request.getMethod();
        if (method.equals("OPTIONS")) {
            //跳过跨域中的OPTIONS请求
            return true;
        }
        //判断,请求的方法是否包含了 NoAuthorization ,如果包含了,就不需要做处理
        if (handler instanceof HandlerMethod) {
            HandlerMethod handlerMethod = (HandlerMethod) handler;
            NoAuthorization annotation = handlerMethod.getMethod().getAnnotation(NoAuthorization.class);
            if (annotation != null) {
                return true;
            }
        }

        String token = request.getHeader("Authorization");
        token = token.replace("Bearer ", "");
        Admin admin = adminService.queryUserByToken(token);
        if (null == admin) {
            response.setStatus(401); //无权限
            return false;
        }
        admin.setToken(token);
        // 存储到当前的线程中
        UserThreadLocal.set(admin);
        return true;
    }
}

配置拦截路径

@Configuration
public class WebConfig implements WebMvcConfigurer {


    @Autowired
    private TokenInterceptor tokenInterceptor;

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        //注意拦截器的顺序
        registry.addInterceptor(this.tokenInterceptor).addPathPatterns("/**");
    }
}

定时任务

启动类加此注解

@EnableScheduling  //开启基于注解的定时任务

配置该方法

/**
*cron表达式百度生成
*/
@Scheduled(cron = "0 0/30 * * * *") //每30分钟执行一次该方法
public void run() {
    
}

配置自动填充字段(参考)

@Component
public class MyMetaObjectHandler implements MetaObjectHandler {

    @Override
    public void insertFill(MetaObject metaObject) {
        Object created = getFieldValByName("created", metaObject);
        if (null == created) {
            //字段为空,可以进行填充
            setFieldValByName("created", new Date(), metaObject);
        }

        Object updated = getFieldValByName("updated", metaObject);
        if (null == updated) {
            //字段为空,可以进行填充
            setFieldValByName("updated", new Date(), metaObject);
        }
    }

    @Override
    public void updateFill(MetaObject metaObject) {
        setFieldValByName("updated", new Date(), metaObject);
    }
}

配合该类使用

@Data
public abstract class BasePojo {

    @TableField(fill = FieldFill.INSERT)
    private Date created;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Date updated;
}

posted on 2020-12-10 21:11  iyaya  阅读(68)  评论(0编辑  收藏  举报