プロジェクト構想---インタフェースの権限制御、登録検査及びホワイトリストの設定


インタフェースの権限制御、ログインチェック、ホワイトリストの設定
ログインに成功した後、いくつかのインタフェースにアクセスすることができます.そうしないと、他のインタフェースはアクセスできません.あるいは、このユーザーがリクエストを開始したときに、ログイン状態であるかどうかを確認します.また、ログインする必要がなくてもアクセスできるインタフェースもあります.ここで簡単な記録をします.
まず、これらのニーズを見たときに、プロファイルの中にホワイトリストを配置し、その後、ホワイトリストのプロファイルを読み込んでホワイトリストのリストを取得することで、その書き込みインタフェースを取得して判断する必要はありません.
次に、1つのブロックをして、フロントが要求を開始するたびに、ブロックに使用して、その後比較して、ホワイトリストインタフェースであれば、ブロックする必要はありません.直接削除して、ブロックする必要があれば、ブロックして、業務判断を行います.
その後、ビジネスロジックに基づいてホワイトリストを判断し、その後、ログイン権限を判断し、ロール権限を判断し、最後に異常を投げ出し、フロントに戻り、フロント情報を通知する.
1、ホワイトリストの読み取りとブロッキングの設定
2、業務に応じて処理する.
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

        Map map = CommonUtils.getIpAddr(request);
        if (restList.contains(map.get("uri"))) {
            logger.info(map.get("uri")+"    ");
            return true;
        }

        //             session         
        Object loginName = request.getSession().getAttribute("loginName");
        if (null == loginName || !(loginName instanceof String)) {
            //    ,       
            throw new YzptException(CodeEnums.USER_TOKEN_FAIL);
        }
        String userName = (String) loginName;
        System.out.println("       ,       : " + userName);
        return true;
    }

要求リソースを処理するための情報方法. 
    public static Map getIpAddr(HttpServletRequest request) {

        Map map = new HashMap();

        String uri = request.getRequestURI();//           
        String url = request.getRequestURL().toString();//            url
        String params = request.getQueryString();//           
        String host = request.getRemoteHost();//              
        int port = request.getRemotePort();//              。

        String ip = request.getHeader("X-Forwarded-For");
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("Proxy-Client-IP");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("WL-Proxy-Client-IP");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("HTTP_CLIENT_IP");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("HTTP_X_FORWARDED_FOR");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getRemoteAddr();
        }
        map.put("host",host);
        map.put("params",params);
        map.put("url",url);
        map.put("uri",uri);
        map.put("port",String.valueOf(port));
        map.put("ip",ip);
        return map;
    }

まとめ:プロジェクトを始める时、全体の流れをはっきり考えなければならなくて、それからプロジェクトモジュールを分解して、各ブロックの书き込みと処理を行って、コードはあまりそろっていないで、それからインタフェースの権限の制御は私はまだ书いていないで、主にsessionの中でマークして、このユーザーの身分、それから要求する时、このインタフェースを呼び出すことができるかどうかをブロックして判断すればいいのですが、前に机能を书く时に、これらの机能をすべて上に书いたので、スクリーンショットとコードは特にそろっていません.qq:1029273212を加えてソースコードを要求することができます.そして、神様が教えてくれたらもっといいです.みんなと一绪に成长することを期待しています.