Handler 是一个全局的拦截器,我们来看看 Cloudopt Next 自带的 ShowRouteHandler。

    1. @AutoHandler
    2. class ShowRouteHandler : Handler {
    3. override fun preHandle(resource: Resource): Boolean {
    4. if (ConfigManager.config.showRoute) {
    5. val df = SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
    6. logger.info(
    7. "Match route ----------------- " + df.format(Date())
    8. + " ------------------------------"
    9. )
    10. logger.info("Method : ${resource.request.method()}")
    11. logger.info("Path : ${resource.context.normalisedPath()}")
    12. logger.info("User-Agent : ${resource.request.getHeader("User-Agent")}")
    13. val params = resource.request.params()
    14. params.forEach { entry ->
    15. if (params.contains(entry.key)) {
    16. params.remove(entry.key)
    17. params.add(entry.key, entry.value)
    18. }
    19. }
    20. logger.info("Params : ${Jsoner.toJsonString(params?.entries() ?: "[]")}")
    21. logger.info("Cookie : ${Jsoner.toJsonString(resource.request.getHeader("Cookie") ?: "")}")
    22. logger.info(
    23. "--------------------------------------------------------------------------------"
    24. )
    25. }
    26. return true
    27. }
    28. override fun postHandle(resource: Resource): Boolean {
    29. return true
    30. }
    31. override fun afterRender(resource: Resource, bodyString: String): Boolean {
    32. return true
    33. }
    34. override fun afterCompletion(resource: Resource): Boolean {
    35. return true
    36. }
    37. companion object {
    38. private val logger = Logger.getLogger(ShowRouteHandler::class.java)
    39. }
    40. }

    如果您需要创建一个自己的Handler,只需要继承Handler类即可。如果类上面添加了@AutoHandler注解,Cloudopt Next在启动时会自动注册。如果您只想手动注册的话,可以在服务器启动前手动增加。

    preHandle 是在请求到达后开始处理前执行,也就是在执行路由方法前。

    postHandle 是在路由方法执行完,执行 render 之前执行。

    afterRender 是在 render 完成之后,返回数据给用户之前。会自动将 render 的渲染结果注入到方法中。

    afterCompletion 是在请求结束并断开后执行。

    你可以通过下面的方法使用一个 Handler:

    1. NextServer.addHandler(ShowRouteHandler())
    2. NextServer.run(App::class.java)
    1. NextServer.addHandler(new ShowRouteHandler());
    2. NextServer.run(App.class);