Discuss / Java / @ExceptionHandler(RuntimeException.class)咋没生效呢

@ExceptionHandler(RuntimeException.class)咋没生效呢

Topic source

Defias-迪

#1 Created at ... [Delete] [Delete and Lock User]

异常处理器@ExceptionHandler(RuntimeException.class)没生效,密码错误时直接报错了,没有返回500的页面

2020-09-02 12:37:47 WARN  c.i.learninter.web.AuthInterceptor - login by authorization header failed.
java.lang.RuntimeException: login failed.
	at com.itranswarp.learninter.service.UserService.signin(UserService.java:40)
	at com.itranswarp.learninter.web.AuthInterceptor.authenticateByHeader(AuthInterceptor.java:47)
	at com.itranswarp.learninter.web.AuthInterceptor.preHandle(AuthInterceptor.java:31)
	at org.springframework.web.servlet.HandlerExecutionChain.applyPreHandle(HandlerExecutionChain.java:141)
	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1035)
	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943)
	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
	at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:634)
	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:526)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408)
	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:860)
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1589)
	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
	at java.lang.Thread.run(Thread.java:748)
2020-09-02 12:37:47 INFO  c.i.learninter.web.LoggerInterceptor - postHandle /profile.
2020-09-02 12:37:47 INFO  c.i.learninter.web.LoggerInterceptor - afterCompletion /profile: exception = null

楼上的老哥,有没有在signin失败的时候抛出runtime exception?

顺着廖老师的教程做过来的话之前是return new ModelAndView的 得注掉那句然后把e给丢出去才行

    @PostMapping("/signin")   public ModelAndView doSignin(@RequestParam("email") String email, @RequestParam("password") String password,         HttpSession session) {      try {         User user = userService.signin(email, password);         session.setAttribute(KEY_USER, user);      } catch (RuntimeException e) {//       return new ModelAndView("signin.html", Map.of("email", email, "error", "Signin failed"));         throw e;      }      return new ModelAndView("redirect:/profile");   }

  • 1

Reply