Spring自定义参数解析器

结合redis编写User自定义参数解析器UserArgumentResolver
 1 import javax.servlet.http.Cookie;
 2 import javax.servlet.http.HttpServletRequest;
 3 import org.springframework.beans.factory.annotation.Autowired;
 4 import org.springframework.core.MethodParameter;
 5 import org.springframework.stereotype.Service;
 6 import org.springframework.web.bind.support.WebDataBinderFactory;
 7 import org.springframework.web.context.request.NativeWebRequest;
 8 import org.springframework.web.method.support.HandlerMethodArgumentResolver;
 9 import org.springframework.web.method.support.ModelAndViewContainer;
10 import cn.xingaohbd.seckil.model.User;
11 import cn.xingaohbd.seckil.service.UserService;
12 
13 @Service
14 public class UserArgumentResolver implements HandlerMethodArgumentResolver {
15 
16     @Autowired
17     public UserService userService;
18     
19     public String getParameterCokies(HttpServletRequest request,String tokenName){
20         Cookie[] cookies = request.getCookies();
21         for (Cookie ck : cookies) {
22             if(ck.getName().equals(tokenName)){
23                 return ck.getValue();
24             }
25         }
26         return null;
27     }
28     
29     @Override
30     public boolean supportsParameter(MethodParameter methodParameter) {
31         Class<?> p_class = methodParameter.getParameterType();
32         return p_class == User.class;
33     }
34 
35     @Override
36     public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer,
37             NativeWebRequest nativeWebRequest, WebDataBinderFactory binderFactory) throws Exception {
38         HttpServletRequest request = nativeWebRequest.getNativeRequest(HttpServletRequest.class);
39         String requestParameter_token = request.getParameter("token");
40         String cokies_token = getParameterCokies(request, "token");
41         if(requestParameter_token == null && cokies_token == null){
42             return null;
43         }
44         return userService.getUserFromRedisByToken(requestParameter_token != null ? requestParameter_token : cokies_token);
45     }
46 
47 }

UserService

@Service
@Transactional
public class UserServiceImpl implements UserService {
    @Autowired
    private UserRedis userRedis;

    @Override
    public Object getUserFromRedisByToken(String token) {
        return userRedis.get(token);
    }
}
在WebConfig中注册自定义参数解析器UserArgumentResolver
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.util.ResourceUtils;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;

@Configuration
public class WebConfig extends WebMvcConfigurationSupport{

    @Autowired
    UserArgumentResolver userArgumentResolver;
    
    @Override
    protected void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
        argumentResolvers.add(userArgumentResolver);
    }

    public void addResourceHandlers(ResourceHandlerRegistry registry){
        registry.addResourceHandler("/**").addResourceLocations(ResourceUtils.CLASSPATH_URL_PREFIX+"/static/");
        super.addResourceHandlers(registry);
    }
    
}
posted @ 2019-06-25 11:13  咸鱼加点盐  阅读(1190)  评论(0编辑  收藏  举报
top