保護代理模式-Access Proxy(Java實現)

來源:互聯網
上載者:User

標籤:result   分享圖片   代理模式   接管   實體類   ret   final   search   print   

保護代理模式-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);    }}

 運行結果如下:  

 

保護代理模式-Access Proxy(Java實現)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.