dromara/Sa-Token · error · SaTokenException

10032

10032

Error message

注册的侦听器不可以为空

What it means

SaTokenException (code 10032) thrown by SaTokenEventCenter.registerListener(SaTokenListener) when the listener argument is null. A null listener would throw NPE later during every event broadcast, so registration rejects it up front.

Source

Thrown at sa-token-core/src/main/java/cn/dev33/satoken/listener/SaTokenEventCenter.java:72

	/**
	 * 重置侦听器集合
	 * @param listenerList / 
	 */
	public static void setListenerList(List<SaTokenListener> listenerList) {
		if(listenerList == null) {
			throw new SaTokenException("重置的侦听器集合不可以为空").setCode(SaErrorCode.CODE_10031);
		}
		SaTokenEventCenter.listenerList = listenerList;
	}

	/**
	 * 注册一个侦听器 
	 * @param listener / 
	 */
	public static void registerListener(SaTokenListener listener) {
		if(listener == null) {
			throw new SaTokenException("注册的侦听器不可以为空").setCode(SaErrorCode.CODE_10032);
		}
		listenerList.add(listener);
	}

	/**
	 * 注册一组侦听器 
	 * @param listenerList / 
	 */
	public static void registerListenerList(List<SaTokenListener> listenerList) {
		if(listenerList == null) {
			throw new SaTokenException("注册的侦听器集合不可以为空").setCode(SaErrorCode.CODE_10031);
		}
		for (SaTokenListener listener : listenerList) {
			if(listener == null) {
				throw new SaTokenException("注册的侦听器不可以为空").setCode(SaErrorCode.CODE_10032);
			}
		}
		SaTokenEventCenter.listenerList.addAll(listenerList);

View on GitHub (pinned to ac2c7f6e94)

Solutions

  1. Null-check before registering: if (listener != null) SaTokenEventCenter.registerListener(listener)
  2. Fix the bean/provider so it never yields null (fail bean creation loudly instead)
  3. Filter nulls when bulk-registering: listeners.stream().filter(Objects::nonNull).forEach(SaTokenEventCenter::registerListener)

Example fix

// before
SaTokenEventCenter.registerListener(context.getBean("myListener", SaTokenListener.class)); // bean missing -> null -> 10032

// after
SaTokenListener l = context.getBeanProvider(SaTokenListener.class).getIfAvailable();
if (l != null) SaTokenEventCenter.registerListener(l);
Defensive patterns

Strategy: validation

Validate before calling

if (listener != null) {
    SaTokenEventCenter.registerListener(listener);
}

Prevention

When it happens

Trigger: Calling SaTokenEventCenter.registerListener(null) — commonly from a DI container or startup hook where the listener bean failed to instantiate (returned null) or a conditionally created listener was null.

Common situations: Registering a bean obtained from a context that has not initialized it yet; conditional listener creation (if (useCustom) listener = new ... else null) then unconditional registration; framework integration code looping over a list containing nulls without filtering.

Related errors


AI-assisted analysis of dromara/Sa-Token@ac2c7f6e94 (2026-08-14). Data as JSON: /api/errors/f61d3d3c7b54d4a9. Report an issue: GitHub.