未整理
统一拦截
自定义不被拦截注解
@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;
}