У меня есть класс DBUtil аннотированный в @RepositoryСИЛЬНЫЙ: Servlet.service() для сервлета appServlet бросил исключение
@Repository
public class DBUtil {
private SessionFactory sessionFactory;
public DBUtil(SessionFactory sf) {
this.sessionFactory = sf;
}
@Transactional
public Object saveTable(Object obj){
Session session = this.sessionFactory.getCurrentSession();
session.save(obj);
return obj;
}
}
В моем сервлет-контексте я сделал запись для базового пакета
Теперь я пытаюсь autowire «DBUtil» в класс CommonUtil, который, как показано ниже:
public class CommonUtil {
@Autowired
private DBUtil dbUtil;
public void setDBUtil(DBUtil dbUtil){
this.dbUtil = dbUtil;
}
public Member getMemberFromUserName(String userName){
String userCheckQry = "from Users where userName like :username";
Map<String, Object> parameters = new HashMap<String, Object>();
parameters.put("username", userName);
List userList = this.dbUtil.executeHQLQuery(userCheckQry, parameters, false);
Users user = (Users) userList.get(0);
String memberQry = "from Member where memberId = :memId";
Map<String, Object> memParams = new HashMap<String, Object>();
memParams.put("memId", user.getId());
List memList = this.dbUtil.executeHQLQuery(memberQry, memParams, false);
return (Member) memList.get(0);
}
}
Когда я делаю это, я получаю следующее сообщение об ошибке:
May 02, 2016 11:54:36 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet appServlet threw exception
java.lang.NullPointerException
at com.rasoirecipes.util.CommonUtil.getMemberFromUserName(CommonUtil.java:56)
at com.rasoirecipes.impl.AuthenticationSuccessHandlerImpl.onAuthenticationSuccess(AuthenticationSuccessHandlerImpl.java:32)
at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.successfulAuthentication(AbstractAuthenticationProcessingFilter.java:331)
at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:245)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:120)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:64)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:108)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:91)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:213)
at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:176)
at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:344)
at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:261)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:108)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardH
Добавление класса AuthenticationSuccessHandlerImpl: (Как только пользователь входит в систему, я хочу, чтобы сохранить идентификатор пользователя и имя в сессии)
public class AuthenticationSuccessHandlerImpl implements AuthenticationSuccessHandler {
private RedirectStrategy redirectStrategy = new DefaultRedirectStrategy();
@Override
public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException {
//do what you want with
System.out.println("came after login "+ request.getPathInfo());
HttpSession session = request.getSession();
System.out.println(session);
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
System.out.println(auth.getName());
CommonUtil common = new CommonUtil();
Member member = common.getMemberFromUserName(auth.getName());
System.out.println(member.getName());
session.setAttribute("uid", member.getMemberId());
session.setAttribute("uname", member.getName());
// SavedRequest savedRequest = new HttpSessionRequestCache().getRequest(request, response);
// System.out.println(savedRequest.getRedirectUrl());
// if(savedRequest != null) {
// System.out.println(savedRequest.getRedirectUrl());
// }
String targetUrl = "/";
redirectStrategy.sendRedirect(request, response, targetUrl);
}
}
Я предполагаю, что вы используете аромат весенних данных, чтобы получить '@ Repository'? Какая линия фактически бросает NPE? Можете ли вы показать соответствующий весенний контекст? – Taylor
Нам нужно увидеть 'AuthenticationSuccessHandlerImpl'. – chrylis
@Taylor List userList = this.dbUtil.executeHQLQuery (userCheckQry, параметры, false); эта строка вызывает ошибку – Swaprks