如何在 Spring Boot 中调试请求?

问题描述 投票:0回答:2

我的电脑重新启动,我的应用程序今天不再运行。昨天还在工作。除了 Maven 下载新库(主要是 Amazon)之外,没有任何改变。现在我什至无法访问

/admin/login
页面。如何调试请求?

2019-09-13 17:26:16.924  INFO 2056 --- [  restartedMain] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/admin/login],methods=[GET]}" onto public java.lang.String com.s.s.controller.Controller.login()
2019-09-13 17:26:21.465 ERROR 2056 --- [nio-8080-exec-1] c.s.s.c.Controller     : invalidRequest(): invalid request: /admin/login

@RequestMapping(value="/admin/login", method=RequestMethod.GET)
public String login() {
    return "login";
}
@RequestMapping("/error")
public void invalidRequest(HttpServletRequest request, HttpServletResponse response){

    Logger.error(TAG, "invalidRequest()", "invalid request: " + request.getAttribute(RequestDispatcher.FORWARD_REQUEST_URI));
    try {
        response.setStatus(HttpStatus.OK.value());
        response.getWriter().write("This is not a valid request");
    } catch (IOException e) {
        Logger.error(TAG, "invalidRequest: ", "Exception in invalidRequest() method "+e.getMessage());
    }
}
@Override
public String getErrorPath() {
    return "/error";
}

我在

application.properties
中设置了这一行,但它没有打印任何额外的内容。

logging.level.com.s.s.controller.Controller=DEBUG

我运行了

mvn clean
并重新启动了服务器,但没有帮助。

我在

application.properties
中设置了这一行,但它没有打印任何有用的东西。

debug=true

日志:

2019-09-13 17:40:25.459 DEBUG 2056 --- [nio-8080-exec-1] o.s.b.w.f.OrderedRequestContextFilter    : Bound request context to thread: org.apache.catalina.connector.RequestFacade@4d3e8c3a
2019-09-13 17:40:25.460 DEBUG 2056 --- [nio-8080-exec-1] o.s.b.w.f.OrderedRequestContextFilter    : Cleared thread-bound request context: org.apache.catalina.connector.RequestFacade@4d3e8c3a

2019-09-13 17:40:25.463 ERROR 2056 --- [nio-8080-exec-1] c.s.s.c.Controller     : invalidRequest(): invalid request: /admin/login
2019-09-13 17:40:25.477 DEBUG 2056 --- [nio-8080-exec-2] o.s.b.w.f.OrderedRequestContextFilter    : Bound request context to thread: org.apache.catalina.connector.RequestFacade@4d3e8c3a
2019-09-13 17:40:25.484 DEBUG 2056 --- [nio-8080-exec-2] o.s.b.w.f.OrderedRequestContextFilter    : Cleared thread-bound request context: org.apache.catalina.connector.RequestFacade@4d3e8c3a

$ git status
        modified:   src/main/resources/application.properties 
        modified:   src/main/resources/static/js/home.js      

我将库与上次部署的库进行了比较,唯一的变化是

aws-java-sdk-core-1.11.631.jar
aws-java-sdk-kms-1.11.631.jar
aws-java-sdk-s3-1.11.631.jar
aws-java-sdk-ses-1.11.631.jar
jmespath-java-1.11.631.jar

我评论了

public String getErrorPath()
public void invalidRequest()
,现在它给了我

Whitelabel Error Page
This application has no explicit mapping for /error, so you are seeing this as a fallback.

Fri Sep 13 18:59:03 UTC 2019
There was an unexpected error (type=Forbidden, status=403).
No message available

但是有了

curl
它就给出了

$ curl localhost:8080/admin/login
{"timestamp":1568401131164,"status":403,"error":"Forbidden","message":"No message available","path":"/admin/login"}

我在 Makgigrahul 的答案中发现了以下搜索

spring-sleuth
的内容,并将其添加到
application.properties
中,生成此日志。

logging.level.org.springframework.web.servlet.DispatcherServlet=DEBUG

日志:

2019-09-13 16:10:11.329 DEBUG 15356 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Initializing servlet 'dispatcherServlet'
2019-09-13 16:10:11.330  INFO 15356 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring FrameworkServlet 'dispatcherServlet'
2019-09-13 16:10:11.331  INFO 15356 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : FrameworkServlet 'dispatcherServlet': initialization started
2019-09-13 16:10:11.332 DEBUG 15356 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Using MultipartResolver [org.springframework.web.multipart.support.StandardServletMultipartResolver@6481dcd8]
2019-09-13 16:10:11.332 DEBUG 15356 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Using LocaleResolver [org.springframework.web.servlet.i18n.AcceptHeaderLocaleResolver@50cc90f2]
2019-09-13 16:10:11.339 DEBUG 15356 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Unable to locate ThemeResolver with name 'themeResolver': using default [org.springframework.web.servlet.theme.FixedThemeResolver@135fd762]
2019-09-13 16:10:11.345 DEBUG 15356 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Unable to locate RequestToViewNameTranslator with name 'viewNameTranslator': using default [org.springframework.web.servlet.view.DefaultRequestToViewNameTranslator@61cc4a6b]
2019-09-13 16:10:11.352 DEBUG 15356 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Unable to locate FlashMapManager with name 'flashMapManager': using default [org.springframework.web.servlet.support.SessionFlashMapManager@766c1f26]
2019-09-13 16:10:11.353 DEBUG 15356 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Published WebApplicationContext of servlet 'dispatcherServlet' as ServletContext attribute with name [org.springframework.web.servlet.FrameworkServlet.CONTEXT.dispatcherServlet]
2019-09-13 16:10:11.355  INFO 15356 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : FrameworkServlet 'dispatcherServlet': initialization completed in 23 ms
2019-09-13 16:10:11.356 DEBUG 15356 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Servlet 'dispatcherServlet' configured successfully
2019-09-13 16:10:11.376 DEBUG 15356 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : DispatcherServlet with name 'dispatcherServlet' processing GET request for [/error]
2019-09-13 16:10:11.383 DEBUG 15356 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Last-Modified value for [/error] is: -1
2019-09-13 16:10:11.408 DEBUG 15356 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Rendering view [org.springframework.boot.autoconfigure.web.ErrorMvcAutoConfiguration$SpelView@53191939] in DispatcherServlet with name 'dispatcherServlet'
2019-09-13 16:10:11.415 DEBUG 15356 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Successfully completed request

java spring spring-boot spring-security
2个回答
3
投票
  • 您可以尝试在以下位置设置断点
    org.apache.catalina.core.ApplicationFilterChain#doFilter()
    方法。
    这在请求处理的开始阶段非常好。
  • 或者你可以看看
    org.springframework.web.servlet.DispatcherServlet#doDispatch()
    方法。

1
投票

我能够使用 Andreas 的答案进行调试,并看到

request.request.filterChain.filters[]
的值,看到我的过滤器
remoteAddressFilter()
并看到
remoteAddress = 0:0:0:0:0:0:0:1
。我有一个 IP 过滤器 (
RemoteAddrFilter
),允许的值之一是
127.0.0.1
。我正在使用
http://localhost:8080/admin/home
访问服务器,它显然使用的是 IP6 地址。可能是重新启动计算机的 Windows 更新改变了网络行为。当我使用
http://127.0.0.1:8080/admin/home
时它起作用了。我想向过滤器添加日志记录以在被阻止时发出通知,但没有明显的方法。 Amazing Spring 不会在调试模式下记录过滤器。

© www.soinside.com 2019 - 2024. All rights reserved.