注解

2022/8/29 23:22:47

本文主要是介绍注解,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

public class WxJwtFilter implements Filter {

    @Autowired
    private IUcUserService userService;
    @Autowired
    RequestMappingHandlerMapping requestMappingHandlerMapping;


    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) servletRequest;
        LoginUserUtil.removeUser();
//        LoginUserUtil.removeTenantId();
        String tenantId = request.getHeader(Constants.MP_APP_ID_HEADER_NAME);
        if (StringUtils.isNotEmpty(tenantId)){
            LoginUserUtil.setCurrentTenantId(tenantId);
        }
        boolean isOk = false;
            try {
                RequiresAuthentication requiresAuthentication = null;
                HandlerExecutionChain handlerExecutionChain = requestMappingHandlerMapping.getHandler(request);
                Object object = null;
                if (handlerExecutionChain != null){
                    object = handlerExecutionChain.getHandler();
                }
                if (object instanceof HandlerMethod){
                    HandlerMethod handler = (HandlerMethod) object;
                    requiresAuthentication = handler.getMethodAnnotation(RequiresAuthentication.class);
                }

                if (requiresAuthentication != null){
                    String token = request.getHeader(Constants.H5_TOKEN_HEADER_NAME);
                    if (StringUtils.isEmpty(token)){
                        token = request.getParameter(Constants.H5_TOKEN_HEADER_NAME);
                    }
                    if (StringUtils.isEmpty(token)){
                        toJsonResponse(servletResponse, ResponseUtil.unlogin());
                    }else {
                        log.info("用户token:{}", token);
                        try {
                            String userId = JwtHelper.getInstance().getSubjectFromToken(token);
                            UcUser user = userService.getById(Integer.parseInt(userId));
                            if (user != null){
                                LoginUserUtil.setCurrentUser(user);
                                isOk = true;
                            }
                        } catch (Exception e) {
                            log.error(e.getLocalizedMessage(), e);
                            isOk = false;
                        }
                        if (isOk){
                            filterChain.doFilter(servletRequest, servletResponse);
                        }else {
                            toJsonResponse(servletResponse, ResponseUtil.unlogin());
                        }
                    }

                }else {
                    filterChain.doFilter(servletRequest, servletResponse);
                }
            } catch (Exception e) {
                throw new ServletException(e);
            }
    }

    private void toJsonResponse(ServletResponse servletResponse, ResponseWrapper responseWrapper) {
        try {
            servletResponse.setContentType("application/json;charset=UTF-8");
            JacksonUtil.getObjectMapper().writeValue(servletResponse.getOutputStream(), responseWrapper);
        } catch (IOException e) {
            log.error(e.getLocalizedMessage(), e);
        }
    }
}


这篇关于注解的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程