保护代理模式-Access Proxy(Java实现)
2018-06-18 00:57:12来源:未知 阅读 ()
保护代理模式-Access Proxy
保护代理模式(Access Proxy), 也叫Protect Proxy. 这种代理用于对真实对象的功能做一些访问限制, 在代理层做身份验证. 通过了验证, 才调用真实的主体对象的相应方法.
模拟场景如下: 某平台的系统有查询功能, 可以根据关键词进行查询, 在查询之前对该关键词进行检查, 如果关键词是敏感词, 那么就不予处理. 如果成功查询了该关键词, 那么就记录一条日志.
(敏感词验证同理也可以换成 `用户的身份验证` 之类的其他的验证)
Searchable接口
无论是实体类还是代理类, 都需要实现这个接口. 因为本例子中的主要功能就是搜索. 代理类做的事情就是接管(代理)这个方法, 然后再执行这个方法之前进行敏感词验证, 执行这个方法成功的时候进行日志记录.
public interface Searchable { String search(String keyword); }
RealSearch类
这是真实的实体对象, 他的主要方法search()在本例子中仅仅是一条SQL语句, 在真实的场景中可以是sql的查询`结果集`.
public class RealSearch implements Searchable { public RealSearch() { } /** * 真实的查询 */ public String search(String keyword) { return "真正的查询: SELECT * FROM users WHERE keyword = " + keyword; } }
LoggerHelper类
工具类, 用于记录日志(当然, 在本里子中仅仅是模拟记录日志)
public class LoggerHelper { /** * 记录日志 */ public static void log(String keyword) { System.out.println("模拟log4j记录日志 >> info >> login >> keyword: [" + keyword + "]"); } }
ValidatorHelper类
工具类, 用于验证是否是敏感信息.
public class ValidatorHelper { /** * 敏感词黑名单 */ private static final HashSet<String> blackList = new HashSet<String>() {{ add("jack123"); add("json898"); add("nancy"); }}; /** * 敏感词验证 * 如果keyword在黑名单blackList里, 那么返回false * 如果keyword不在黑名单blackList里, 那么返回true */ public static boolean validate(String userId) { return !blackList.contains(userId.trim()); } }
ProxySearch类
代理类, 做的事情就是接管RealSearch类的search()方法, 然后再执行这个方法之前进行敏感词验证, 执行这个方法成功的时候进行日志记录.
public class ProxySearch implements Searchable { private RealSearch searcher; public ProxySearch() { searcher = new RealSearch(); } /** * 查询前的授权操作 */ private boolean check(String keyword) { if (ValidatorHelper.validate(keyword)) { System.out.println("不是敏感词:" + keyword); return true; } else { System.out.println("是敏感词:" + keyword); return false; } } /** * 查询操作模板 */ public String search(String keyword) { if (check(keyword)) { // 不是敏感词, 那就予以查询处理 String result = searcher.search(keyword); // 查询成功再打一条日志记录一下 LoggerHelper.log(keyword); // 返回查询结果 return result; } else { // 是敏感词, 那么就无法被正常处理. return null; } } }
Main
在本类中调用/调试/运行
public class Main { public static void main(String[] args) { Searchable searcher = new ProxySearch(); String keyword = "football"; String result = searcher.search(keyword); System.out.println(result); } }
运行结果如下:
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 代理项 Surrogate 2020-06-11
- 设计模式-委派/策略模式 2020-06-09
- 深入理解:设计模式中的七大设计原则 2020-06-07
- 设计模式---类之间的关系知多少 2020-06-07
- 你与面试官所了解的单例模式并不一样! 2020-06-06
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash