非spring-cloud项目增加hystrix监控

  1. 增加依赖
  2. 添加servlet
  3. 增加Basic安全认证

增加依赖

pom文件中

 <dependency>
  <groupId>com.netflix.hystrix</groupId>
  <artifactId>hystrix-metrics-event-stream</artifactId>
  <version>${hystrix.version}</version>
 </dependency>
  • 1
  • 2
  • 3
  • 4
  • 5

添加servlet

web.xml 中

  <servlet>
    <display-name>HystrixMetricsStreamServlet</display-name>
    <servlet-name>HystrixMetricsStreamServlet</servlet-name>
    <servlet-class>com.netflix.hystrix.contrib.metrics.eventstream.HystrixMetricsStreamServlet
    </servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>HystrixMetricsStreamServlet</servlet-name>
    <url-pattern>/hystrix.stream</url-pattern>
  </servlet-mapping>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

增加Basic安全认证

web.xml 中

<filter>
    <filter-name>basicAuthenticationFilter</filter-name>
    <filter-class>com.dapeng.cloud.support.web.BasicAuthenticationFilter</filter-class>
    <init-param>
      <param-name>username</param-name>
      <param-value>xxxx</param-value>
    </init-param>
    <init-param>
      <param-name>password</param-name>
      <param-value>xxxx</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>basicAuthenticationFilter</filter-name>
    <servlet-name>HystrixMetricsStreamServlet</servlet-name>
  </filter-mapping>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

BasicAuthenticationFilter 源码:

package com.dapeng.cloud.support.web;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.StringTokenizer;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.codec.binary.Base64;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.util.StringUtils;

public class BasicAuthenticationFilter implements Filter {
  private static final Logger LOGGER = LoggerFactory.getLogger(BasicAuthenticationFilter.class);
  private String username = "";
  private String password = "";
  private String realm = "Protected";

  public BasicAuthenticationFilter() {
  }

  public void init(FilterConfig filterConfig) throws ServletException {
    this.username = filterConfig.getInitParameter("username");
    this.password = filterConfig.getInitParameter("password");
    String paramRealm = filterConfig.getInitParameter("realm");
    if (StringUtils.hasText(paramRealm)) {
      this.realm = paramRealm;
    }

  }

  public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
    HttpServletRequest request = (HttpServletRequest)servletRequest;
    HttpServletResponse response = (HttpServletResponse)servletResponse;
    String authHeader = request.getHeader("Authorization");
    if (authHeader != null) {
      StringTokenizer st = new StringTokenizer(authHeader);
      if (st.hasMoreTokens()) {
        String basic = st.nextToken();
        if (basic.equalsIgnoreCase("Basic")) {
          try {
            String credentials = new String(Base64.decodeBase64(st.nextToken()), "UTF-8");
            LOGGER.debug("Credentials: " + credentials);
            int p = credentials.indexOf(":");
            if (p != -1) {
              String _username = credentials.substring(0, p).trim();
              String _password = credentials.substring(p + 1).trim();
              if (this.username.equals(_username) && this.password.equals(_password)) {
                filterChain.doFilter(servletRequest, servletResponse);
              } else {
                this.unauthorized(response, "Bad credentials");
              }
            } else {
              this.unauthorized(response, "Invalid authentication token");
            }
          } catch (UnsupportedEncodingException var13) {
            throw new Error("Couldn't retrieve authentication", var13);
          }
        }
      }
    } else {
      this.unauthorized(response);
    }

  }

  public void destroy() {
  }

  private void unauthorized(HttpServletResponse response, String message) throws IOException {
    response.setHeader("WWW-Authenticate", "Basic realm=\"" + this.realm + "\"");
    response.sendError(401, message);
  }

  private void unauthorized(HttpServletResponse response) throws IOException {
    this.unauthorized(response, "Unauthorized");
  }
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 wzslw@163.com

文章标题:非spring-cloud项目增加hystrix监控

文章字数:555

本文作者:武继明

发布时间:2019-05-07, 17:11:30

最后更新:2020-08-21, 06:30:57

原始链接:https://www.omingo.com/2019/05/07/非spring-cloud项目增加hystrix监控/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

0 条评论
未登录用户
Error: Not Found.
支持 Markdown 语法

来做第一个留言的人吧!

目录
  1. 增加依赖
  2. 添加servlet
  3. 增加Basic安全认证
×

喜欢就点赞,疼爱就打赏