7

JSP とサーブレットを使用して CMS アプリケーションを作成しました。私はいかなる種類のフレームワークも使用していません。CMS には 2 つの部分があります。

  1. フロントエンド
  2. 管理者 (バックエンド)

たとえば、でホストした場合www.example.com、すべてのフロント エンド サイトがすべてのユーザーに表示されます。

ただしwww.example.com/admin、いくつかの IP アドレスからアクセスできる必要があります。すべてのユーザーからではありません。

これらのリンクを見つけました:

リンク 1 は少しわかりにくく、リンク 2 は良さそうですが、私は JBoss を使用していません。

スタック オーバーフローのリンクでは、その使用方法については言及されていません。

4

2 に答える 2

6

あなたの質問から私が理解している限り、あなたはApache Tomcatを Web サーバーとして使用しています。その場合、Remote Address Filterを使用して、IP アドレスによるアクセスを制限してください。要求しているクライアントの IP を正規表現と比較して、比較の結果に基づいて要求を許可または拒否できます。

Tomcat 7を使用する場合は、クラスRemoteAddrFilterを使用し、アプリケーションの構成ファイルで必要な IP の正規表現を定義する必要がありますweb.xml

<filter>
   <filter-name>Remote Address Filter</filter-name>
   <filter-class>org.apache.catalina.filters.RemoteAddrFilter</filter-class>
   <init-param>
      <param-name>allow</param-name> <!-- or deny -->
      <param-value>10\.10\.1[12]\..*</param-value> <!-- regexp for your ip adress -->
   </init-param>
</filter>
<filter-mapping>
   <filter-name>Remote Address Filter</filter-name>
   <url-pattern>*/admin</url-pattern> <!-- the url of your admin page -->
</filter-mapping>

ハードコーディングされた特定の IP アドレスまたは正規表現パターンを使用できます。ただし、場合によっては、正規表現を使用すると、アドレスの検証が非常に柔軟になります。

また、Tomcat のバージョン6または5を使用する場合は、クラスRemoteAddrValveを使用し、Tomcat の構成ファイルで次の行を定義する必要がありますserver.xml

<Valve className=”org.apache.catalina.valves.RemoteAddrValve” allow=”10\.10\.1[12]\..*”/> 

また

 <Valve className="org.apache.catalina.valves.RemoteAddrValve"
    deny="86.57.158.37, 213.117.195.*, 124.86.42.*" /> 

リクエスト フィルター バルブの使用に関する詳細情報。

また、Tomcat を使用して管理 Web アプリを保護することに関する興味深い記事.

localhostちなみに、テスト用のリクエストを拒否しないと便利です。127\.0\.0\.1そのため、IP アドレスの許容範囲に追加することは理にかなっています。

ただし、場合によっては、プロキシ サーバーを使用して IP ブロックを回避できることを忘れないでください。セキュリティを強化するために、ログイン認証も適用します。

于 2012-08-23T11:00:02.130 に答える
5

を定義できますWebFilter

例:

import java.io.IOException;
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.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebFilter(filterName = "ezSecurityAdminFilter", urlPatterns = "/admin/*")
public class EZSecurityAdminFilter implements Filter {

    private static String allowIP = "0:0:0:0:0:0:0:1";

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {

        HttpServletRequest req = (HttpServletRequest) request;
        HttpServletResponse res = (HttpServletResponse) response;


        String ipAddr = req.getRemoteAddr();

        System.out.println("IP-Addr: " + ipAddr);

        if (ipAddr.equals(allowIP)) {
            chain.doFilter(request, response);
        } else {

            res.sendRedirect("/WebApplication1/access_denied.jsp");
        }
    }

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
    }

    @Override
    public void destroy() {
    }
}

他の IP アドレスからのすべてのリクエストはallowIPリダイレクトされます。

于 2012-08-23T08:30:37.753 に答える