프로젝트에서 문제가 발생했습니다. 필터에 서비스를 주입하는 데 실패했고 주입된 서비스가 항상 null이었습니다. 아래와 같이:
public class WeiXinFilter Implements Filter{
@Autowired
private UsersService usersService;
public void doFilter(ServletRequest 요청, ServletResponse 응답, FilterChain 체인)은 IOException, ServletException을 발생시킵니다. {
HttpServletRequest req = (HttpServletRequest)request;
HttpServletResponse resp = (HttpServletResponse)response;
Users users = this.usersService.queryBy Openid(openid);
}
위의 usersService는 널 포인터 예외를 보고합니다.
해결책 1:
public void doFilter(ServletRequest 요청, ServletResponse 응답, FilterChain 체인) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest)request ;
HttpServletResponse resp = (HttpServletResponse)response; ServletContext sc = req.getSession().getServletContext();
XmlWebApplicationContext cxt = (XmlWebApplicationContext)WebApplicationContextUtils.
!= null && cxt.getBean ("usersService") != null && usersService == null)
usersService = (UsersService) cxt.getBean("usersService");
사용자 사용자 = this.usersService .queryByOpenid(openid);
private UsersService usersService
public void init(FilterConfig fConfig)가 ServletException 발생 {
ServletContext sc = fConfig.getServletContext()
XmlWebApplicationContext cxt = (XmlWebApplicationContext)WebApplicationContextUtils.getWebApplicationContext(sc) ) != null && usersService == null)
usersService = (UsersService) cxt.getBean("usersService" ); ServletContext 가져오기:
1) javax.servlet.Filter context에서 직접 ServletContext 가져오기 = config.getServletContext();
2) HttpServlet에서 직접 가져오기
request.getSession().getServletContext();
를 통해 가져옵니다.
2. blessht.iteye.com/blog/2121845):
Spring의 ContextLoaderListener는 ServletContextListener 인터페이스를 구현하는 리스너입니다. 프로젝트를 시작할 때 contextInitialized 메소드가 트리거됩니다(이 메소드는 주로 ApplicationContext 객체 생성을 완료합니다). . contextDestroyed 메소드는 프로젝트가 닫힐 때 트리거됩니다(이 메소드는 ApplicationContext 정리 작업을 수행합니다).
ConextLoaderListener에 의한 Spring 컨텍스트 로드 프로세스
①contextInitialized 메소드는 프로젝트 시작 시 트리거됩니다. 이 메소드는 한 가지 작업을 수행합니다. 즉, 상위 클래스 contextLoader의 initWebApplicationContext 메소드를 통해 Spring 컨텍스트 객체를 생성합니다. .
교체
공용 클래스 WeiXinInterceptor는 HandlerInterceptor {
@Autowired private UsersService usersService를 구현합니다. @override public boolean prehandle (httpservletrequest request, httpservletreponse 응답, 객체 핸들러) 예외 {// todo auto-auto-regenated method stub
return false; }
@Override public void afterCompletion(HttpServletRequest 요청, HttpServletResponse 응답, 객체 처리기, 예외 예) 예외 { // TODO 자동 생성 메서드 스텁
}
}
配置拦截路径:
< ;mvc:인터셉터>
인터셉터>
필터 中注入 서비스 的示例:
공용 클래스 WeiXinFilter는 필터를 구현합니다.{
private UsersService usersService;
public void init(FilterConfig fConfig)에서 ServletException 발생 {} public WeiXinFilter() {} public void destroy() {} public void doFilter(ServletRequest 요청, ServletResponse 응답, FilterChain 체인)에서 IOException 발생, ServletException {
HttpServletRequest req = (HttpServletRequest)request;
HttpServletResponse resp = (HttpServletResponse)response;
String userAgent = req.getHeader("user-agent"); if(userAgent != null && userAgent.toLowerCase().indexOf("micromessenger") != -1){ // 微信浏览器
String servletPath = req.getServletPath();
String requestURL = req. getRequestURL().toString();
String queryString = req.getQueryString();
if(queryString != null){ if(requestURL.indexOf("mtzs.html") !=-1 && queryString.indexOf("LLFlag")!=-1){
req.getSession() .setAttribute("LLFlag", "1");
chain.doFilter(요청, 응답); return;
}
}
String openidDES = CookieUtil.getValueByName("openid", req);
String 오픈아이디 = null; if(StringUtils.isNotBlank(openidDES)){ 시도 {
openid = DesUtil.decrypt(openidDES, "rxxxxxxxxxde"); // 解密获得openid
} catch(예외 e) {
e.printStackTrace();
}
}
// ... ...
문자열[] pathArray = {"/weixin/enterAppFromWeiXin.json", "/weixin/getWeiXinUserInfo.json", "/weixin/getAccessTokenAndOpenid.json", "/sendRegCode.json", "/register.json",
"/로그인. json", "/logon.json", "/dump.json", "/queryInfo.json"};
List
String loginSuccessUrl = req.getParameter("path");
String fullLoginSuccessUrl = "http://www.axxxxxxx.cn/pc/"; if(requestURL.indexOf("weixin_gate.html") !=" 🎜> }
ServletContext sc = req.getSession().getServletContext();
XmlWebApplicationContext cxt = (XmlWebApplicationContext)WebApplicationContextUtils.getWebApplicationContext(sc);
if(cxt != null && c xt.getBean( "usersService") != null && usersService == null)
usersService = (UsersService) cxt.getBean("usersService");
사용자 users = this.usersService.queryByOpenid(openid);
// ... ... if(pathList.contains(servletPath)){ // pathList 中的访问路径直接 pass
chain.doFilter(request, response); return;
}else{ } if(req.getSession().getAttribute(CommonConstants.SESSION_KEY_USER) == null){ // 로그인되지 않음
String llFlag = (String ) req .getSession().getAttribute("LLFlag"); | > > 반품;
}else{ // 이미 로그인되어 있음 반품
WeChat 브라우저 chain.doFilter(요청, 응답);
}
}}

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

SublimeText3 Linux 새 버전
SublimeText3 Linux 최신 버전

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

Atom Editor Mac 버전 다운로드
가장 인기 있는 오픈 소스 편집기

에디트플러스 중국어 크랙 버전
작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경
