package com.estate.expert.common.auth;
|
|
import com.estate.expert.common.domain.Session;
|
import org.springframework.core.MethodParameter;
|
import org.springframework.web.bind.support.WebDataBinderFactory;
|
import org.springframework.web.context.request.NativeWebRequest;
|
import org.springframework.web.context.request.RequestAttributes;
|
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
|
import org.springframework.web.method.support.ModelAndViewContainer;
|
|
import java.util.Optional;
|
|
|
/**
|
* 会话解析器
|
*/
|
public class SessionResolver implements HandlerMethodArgumentResolver {
|
|
/**
|
* 是否支持参数
|
* @param methodParameter 方法参数
|
* @return 是否支持
|
*/
|
@Override
|
public boolean supportsParameter(MethodParameter methodParameter) {
|
return methodParameter.getParameterType().isAssignableFrom(Session.class);
|
}
|
|
/**
|
* 解析参数
|
* @param parameter 方法参数
|
* @param mavContainer 模型视图容器
|
* @param webRequest 网络请求
|
* @param binderFactory 数据绑定工厂
|
* @return 参数
|
*/
|
@Override
|
public Object resolveArgument(MethodParameter parameter,
|
ModelAndViewContainer mavContainer,
|
NativeWebRequest webRequest,
|
WebDataBinderFactory binderFactory) {
|
// 为了兼容同时支持已登录和未登录都能访问的接口,这里初始化一个无数据对象避免 NPE
|
return Optional.ofNullable(webRequest.getAttribute("_session_", RequestAttributes.SCOPE_REQUEST)).orElseGet(Session::new);
|
}
|
}
|