代码人生

Scala: Proxy Design Pattern

代码人生 http://www.she9.com 2018-09-18 11:18 出处:网络 编辑:@技术狂热粉
问题陈述 在许多应用程序中,所有用户特定的详细信息,如用户名、IP地址、电话号码等,都是直接记录下来的,而不需要打乱顺序。但是,在新的数据保护法(即EUGDPR)出台后,现在必须对任何特定于用户的数

Scala: Proxy Design Pattern














问题陈述


在许多应用程序中,所有用户特定的详细信息,如用户名、IP地址、电话号码等,都是直接记录下来的,而不需要打乱顺序。但是,在新的数据保护法(即EUGDPR)出台后,现在必须对任何特定于用户的数据进行加密。


解决方案


我们将在日志框架(slf4j)和客户机之间添加一个代理类。


什么是代理设计模式?


代理是一个类,它作为其他东西的接口

代理设计模式侧重于为另一个对象提供一个代理来控制对它的访问。

我们将创建一个LoggerProxy类,它将在调用日志框架之前被调用,它将打乱日志并调用日志框架方法.

Scala: Proxy Design Pattern

build.sbt是一个描述项目设置的文件。我们使用slf4j依赖项向应用程序添加日志框架。

name := "ProxyDesignPattern"

version := "0.1"

scalaVersion := "2.12.6"

// https://mvnrepository.com/artifact/org.slf4j/slf4j-log4j12
libraryDependencies ++= Seq("org.slf4j" % "slf4j-api" % "1.7.5",
    "org.slf4j" % "slf4j-simple" % "1.7.5")


Client类是实际调用日志记录方法的类。

package com.knoldus

object Client extends App {
    val logger  = LoggerProxy.getLogger(this.getClass.getName)
    logger.info("Log Contains IP address: 127.0.0.1")
    logger.debug("UserName: jainnancy trying to sign in")
    logger.error("Password: abxyz is wrong ")
}


The  LoggerHelper class will scramble the logs.

package com.knoldus

class LoggerHelper {
    private val regex = "\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b"
    private val password = "Password: "
    private val userName = "UserName: "

    def scramble(message : String) = scrambleUsername(scrambleIp((scramblePassword(message))))

    private def scrambleUsername(message : String) = {
        if(message.contains(userName)) {
            val index = message.indexOf(userName) + userName.length()
            val textStartedPassword = message.substring(index)
            message.substring(0, index) + "X" + textStartedPassword.substring(textStartedPassword.indexOf(" "))
        }
        else {
            message
        }
    }

    private def scrambleIp(message : String) = message.replaceAll(regex, "XXX.XXX.XXX.XXX")

    private def scramblePassword(message : String) = {
        if(message.contains(password)) {
            val index = message.indexOf(password) + password.length()
            val textStartedPassword = message.substring(index)
            message.substring(0, index) + "X" + textStartedPassword.substring(textStartedPassword.indexOf(" "))
        }
        else {
            message
        }
    }
}


LoggerProxy是一个新类,它将充当客户机和日志框架之间的代理,并确保日志在日志记录之前被打乱。


LoggerProxy将实现Logger接口,该接口在slf4j框架中定义。

package com.knoldus

import org.slf4j.{Logger, LoggerFactory, Marker}

object LoggerProxy extends Logger {
    private var logger : Logger = _
    private val loggerHelper = new LoggerHelper

    def getLogger(name : String) : Logger = {
        logger = LoggerFactory.getLogger(name)
        LoggerProxy
    }

    def getName : String = logger.getName

    def debug(msg : String) : Unit = logger.debug(loggerHelper.scramble(msg))

    def debug(format : String, arg : scala.Any) : Unit = logger.debug(loggerHelper.scramble(format),arg)

    def debug(format : String, arg1 : scala.Any, arg2 : scala.Any) : Unit = logger.debug(loggerHelper.scramble(format), arg1, arg2)

    def debug(format : String, arguments : AnyRef*) : Unit = logger.debug(loggerHelper.scramble(format), arguments)

    def debug(msg : String, t : Throwable) : Unit = logger.debug(loggerHelper.scramble(msg), t)

    def debug(marker : Marker, msg : String) : Unit = logger.debug(marker, loggerHelper.scramble(msg))

    def debug(marker : Marker, format : String, arg : scala.Any) : Unit = logger.debug(marker, loggerHelper.scramble(format), arg)

    def debug(marker : Marker, format : String, arg1 : scala.Any, arg2 : scala.Any) : Unit =
        logger.debug(marker, loggerHelper.scramble(format), arg1, arg2)

    def debug(marker : Marker, format : String, arguments : AnyRef*) : Unit = logger.debug(marker, loggerHelper.scramble(format), arguments)

    def debug(marker : Marker, msg : String, t : Throwable) : Unit = logger.debug(marker, loggerHelper.scramble(msg), t)

    def isWarnEnabled : Boolean = logger.isWarnEnabled

    def isWarnEnabled(marker : Marker) : Boolean = logger.isWarnEnabled(marker)

    def error(msg : String) : Unit = logger.error(loggerHelper.scramble(msg))

    def error(format : String, arg : scala.Any) : Unit = logger.error(loggerHelper.scramble(format), arg)

    def error(format : String, arg1 : scala.Any, arg2 : scala.Any) : Unit = logger.error(loggerHelper.scramble(format), arg1, arg2)

    def error(format : String, arguments : AnyRef*) : Unit = logger.error(loggerHelper.scramble(format), arguments)

    def error(msg : String, t : Throwable) : Unit = logger.error(loggerHelper.scramble(msg), t)

    def error(marker : Marker, msg : String) : Unit = logger.error(marker, loggerHelper.scramble(msg))

    def error(marker : Marker, format : String, arg : scala.Any) : Unit = logger.error(marker, loggerHelper.scramble(format), arg)

    def error(marker : Marker, format : String, arg1 : scala.Any, arg2 : scala.Any) : Unit =
        logger.error(marker, loggerHelper.scramble(format), arg1, arg2)

    def error(marker : Marker, format : String, arguments : AnyRef*) : Unit = logger.error(marker, loggerHelper.scramble(format), arguments)

    def error(marker : Marker, msg : String, t : Throwable) : Unit = logger.error(marker, loggerHelper.scramble(msg), t)

    def warn(msg : String) : Unit = logger.warn(loggerHelper.scramble(msg))

    def warn(format : String, arg : scala.Any) : Unit = logger.warn(loggerHelper.scramble(format), arg)

    def warn(format : String, arguments : AnyRef*) : Unit = logger.warn(loggerHelper.scramble(format), arguments)

    def warn(format : String, arg1 : scala.Any, arg2 : scala.Any) : Unit = logger.warn(loggerHelper.scramble(format), arg1, arg2)

    def warn(msg : String, t : Throwable) : Unit = logger.warn(loggerHelper.scramble(msg), t)

    def warn(marker : Marker, msg : String) : Unit = logger.warn(marker, loggerHelper.scramble(msg))

    def warn(marker : Marker, format : String, arg : scala.Any) : Unit = logger.warn(marker, loggerHelper.scramble(format), arg)

    def warn(marker : Marker, format : String, arg1 : scala.Any, arg2 : scala.Any) : Unit =
        logger.warn(marker, loggerHelper.scramble(format), arg1, arg2)

    def warn(marker : Marker, format : String, arguments : AnyRef*) : Unit = logger.warn(marker, loggerHelper.scramble(format), arguments)

    def warn(marker : Marker, msg : String, t : Throwable) : Unit = logger.warn(marker, loggerHelper.scramble(msg), t)

    def trace(msg : String) : Unit = logger.trace(loggerHelper.scramble(msg))

    def trace(format : String, arg : scala.Any) : Unit = logger.trace(loggerHelper.scramble(format), arg)

    def trace(format : String, arg1 : scala.Any, arg2 : scala.Any) : Unit = logger.trace(loggerHelper.scramble(format), arg1, arg2)

    def trace(format : String, arguments : AnyRef*) : Unit = logger.trace(loggerHelper.scramble(format), arguments)

    def trace(msg : String, t : Throwable) : Unit = logger.trace(loggerHelper.scramble(msg), t)

    def trace(marker : Marker, msg : String) : Unit = logger.trace(marker, loggerHelper.scramble(msg))

    def trace(marker : Marker, format : String, arg : scala.Any) : Unit = logger.trace(marker, loggerHelper.scramble(format), arg)

    def trace(marker : Marker, format : String, arg1 : scala.Any, arg2 : scala.Any) : Unit =
        logger.trace(marker, loggerHelper.scramble(format), arg1, arg2)

    def trace(marker : Marker, format : String, argArray : AnyRef*) : Unit = logger.trace(marker, loggerHelper.scramble(format), argArray)

    def trace(marker : Marker, msg : String, t : Throwable) : Unit = logger.trace(marker, loggerHelper.scramble(msg), t)

    def isInfoEnabled : Boolean = logger.isInfoEnabled

    def isInfoEnabled(marker : Marker) : Boolean = logger.isInfoEnabled(marker)

    def isErrorEnabled : Boolean = logger.isErrorEnabled

    def isErrorEnabled(marker : Marker) : Boolean = logger.isErrorEnabled(marker)

    def isTraceEnabled : Boolean = logger.isTraceEnabled

    def isTraceEnabled(marker : Marker) : Boolean = logger.isTraceEnabled(marker)

    def isDebugEnabled : Boolean = logger.isDebugEnabled

    def isDebugEnabled(marker : Marker) : Boolean = logger.isDebugEnabled(marker)

    def info(msg : String) : Unit = logger.info(loggerHelper.scramble(msg))

    def info(format : String, arg : scala.Any) : Unit = logger.info(loggerHelper.scramble(format), arg)

    def info(format : String, arg1 : scala.Any, arg2 : scala.Any) : Unit = logger.info(loggerHelper.scramble(format), arg1, arg2)

    def info(format : String, arguments : AnyRef*) : Unit = logger.info(loggerHelper.scramble(format), arguments)

    def info(msg : String, t : Throwable) : Unit = logger.info(loggerHelper.scramble(msg), t)

    def info(marker : Marker, msg : String) : Unit = logger.info(marker, loggerHelper.scramble(msg))

    def info(marker : Marker, format : String, arg : scala.Any) : Unit = logger.info(marker, loggerHelper.scramble(format), arg)

    def info(marker : Marker, format : String, arg1 : scala.Any, arg2 : scala.Any) : Unit =
        logger.info(marker, loggerHelper.scramble(format), arg1, arg2)

    def info(marker : Marker, format : String, arguments : AnyRef*) : Unit = logger.info(marker, loggerHelper.scramble(format), arguments)

    def info(marker : Marker, msg : String, t : Throwable) : Unit = logger.info(marker, loggerHelper.scramble(msg), t)

}



References


请关注公众号:程序你好
0

上一篇:

没有了 :下一篇

精彩评论

暂无评论...
验证码 换一张
取 消