分布式定时任务—xxl-job学习(四)——调度中心web页面端api调用源码分析

本文深入分析了xxl-job调度中心的web页面端API调用的源码,涵盖PermissionLimit注解、拦截器、IndexController、JobApiController、JobInfoController等关键类的功能和逻辑,探讨了权限控制、执行器注册与回调、任务管理等核心操作。
摘要由CSDN通过智能技术生成

前言

接上篇:分布式定时任务—xxl-job学习(三)——调度中心(xxl-job-admin)的启动和任务调度过程源码分析

本篇我们从调度中心的wen页面端分析下api调用的源码。
api类
也就是上图中的一些api调用类。

一、controller目录下非controller类

1.1 PermissionLimit自定义注解

/**
 * 权限限制
 * @author xuxueli 2015-12-12 18:29:02
 */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface PermissionLimit {
   
	
	/**
	 * 登录拦截 (默认拦截)
	 */
	boolean limit() default true;

	/**
	 * 要求管理员权限
	 *
	 * @return
	 */
	boolean adminuser() default false;

}

分析:
自定义了一个方法上的权限限制注解,主要控制登录拦截和是否要求有管理员权限。

1.2 拦截器

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
   

    @Resource
    private PermissionInterceptor permissionInterceptor;
    @Resource
    private CookieInterceptor cookieInterceptor;

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
   
        registry.addInterceptor(permissionInterceptor).addPathPatterns("/**");
        registry.addInterceptor(cookieInterceptor).addPathPatterns("/**");
    }

}

分析:
WebMvcConfig 配置类实现了WebMvcConfigurer接口,进行框架个性化定制,可以自定义一些Handler,Interceptor,ViewResolver,MessageConverter等。

在这里重写了void addInterceptors(InterceptorRegistry registry)方法增加拦截器配置

  • addInterceptor:需要一个实现HandlerInterceptor接口的拦截器实例
  • addPathPatterns:用于设置拦截器的过滤路径规则;addPathPatterns("/**")对所有请求都拦截
  • excludePathPatterns:用于设置不需要拦截的过滤规则。

1.2.1 PermissionInterceptor权限拦截器

@Component
public class PermissionInterceptor extends HandlerInterceptorAdapter {
   

	@Resource
	private LoginService loginService;

	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
   
		
		if (!(handler instanceof HandlerMethod)) {
   
			return super.preHandle(request, response, handler);
		}

		// if need login
		boolean needLogin = true;
		boolean needAdminuser = false;
		HandlerMethod method = (HandlerMethod)handler;
		PermissionLimit permission = method.getMethodAnnotation(PermissionLimit.class);
		if (permission!=null) {
   
			needLogin = permission.limit();
			needAdminuser = permission.adminuser();
		}

		if (needLogin) {
   
			XxlJobUser loginUser = loginService.ifLogin(request, response);
			if (loginUser == null) {
   
				response.sendRedirect(request.getContextPath() + "/toLogin");
				//request.getRequestDispatcher("/toLogin").forward(request, response);
				return false;
			}
			if (needAdminuser && loginUser.getRole()!=1) {
   
				throw new RuntimeException(I18nUtil.getString("system_permission_limit"));
			}
			request.setAttribute(LoginService.LOGIN_IDENTITY_KEY, loginUser);
		}

		return super
  • 104
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

RabbitsInTheGrass

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值