2009-12-03 40 views
7

Tôi đang mắc kẹt với một loại vấn đề về cấu hình mà tôi nghĩ. Tôi cần phải bảo vệ một thư mục nằm trong ứng dụng tomcat thực tế của tôi truy cập từ một dải IP nhất định.Cài đặt Van Tomcat

Tôi nghĩ đây là serverfault, vì vậy tôi đã đăng câu hỏi there. Ngay bây giờ tôi không chắc chắn cho dù đây là SO hoặc SF anyways ...

Tuy nhiên tôi vẫn tiếp tục cố gắng geting nó đi một mình và đã tìm thấy tôi cần phải thiết lập các

org.apache.catalina.valves.RemoteAddrValve 

cho rằng thư mục của tôi. Đáng buồn là tôi không thể có được nơi tôi cần phải thực hiện cài đặt đó. web.xml, server.xml? Đã thử cả hai, thành công null. Bất cứ ai có thể xin giúp tôi về điều này.

tia

K

+0

Tôi đã thêm một phần về bộ lọc vào câu trả lời của mình. Tôi nghĩ rằng đây là những gì bạn cần. –

Trả lời

7

Nó nên đi bên trong phần tử <Context> của bạn trong server.xml:

<Context 
    path="/tcadmin" 
    docBase="${catalina.home}/server/webapps/admin" 
    privileged="true" 
> 
    <Valve className="org.apache.catalina.valves.RemoteAddrValve" 
     allow="127\.0\.0\.1" 
    /> 
</Context> 

Chỉ cần nhớ, rằng các giá trị chuỗi là mẫu regex, nhân vật regex trở nên đặc biệt (ví dụ như dấu chấm (.)) phải được thoát bằng dấu gạch chéo ngược.

EDIT: trả lời nhận xét của OP. Tôi nghĩ bạn cần triển khai FILTER trong ứng dụng web của mình và định cấu hình để chấp nhận hoặc từ chối yêu cầu dựa trên địa chỉ IP từ xa của họ. Có thể truy xuất địa chỉ từ xa từ đối tượng ServletRequest được chuyển vào phương thức doFilter.

Bạn khai báo một bộ lọc trong file web.xml của bạn:

<filter> 
    <filter-name>GatekeeperFilter</filter-name> 
    <filter-class>your.package.GatekeeperFilter</filter-class> 
    <init-param> 
    <param-name>allowedNetwork</param-name> 
    <param-value>192\.168\.2\.*</param-value> 
    </init-param> 
</filter> 

<filter-mapping> 
    <filter-name>GatekeeperFilter</filter-name> 
    <url-pattern>/path/to/protected/folder</url-pattern> 
</filter-mapping> 

Đọc bài viết liên quan về những gì cần phải được thực hiện để chấp nhận các thông số init. Tôi nghĩ rằng quyết định của bạn làm cho bạn có thể shamelessly sao chép mã từ RequestDumperValve.

+0

thx đầu tiên cho câu trả lời nhanh, (+1). buồn bã điều này dường như không làm việc được nêu ra. cho đến nay không có phần ngữ cảnh trong tệp server.xml của tôi. Trên thực tế, bản thân ứng dụng sẽ có thể truy cập được trên toàn thế giới. chỉ có một thư mục trong đó, về cơ bản một thư mục chứa một số pdf chỉ có thể được truy cập bởi một số IP nhất định. trong ứng dụng có liên kết a href đơn giản với thư mục đó. nếu khách hàng từ mạng nội bộ của tôi tất cả mọi thứ là ok. nếu khách hàng là bên ngoài thư mục không nên mở cho anh ta. cách tiếp cận của tôi có đúng không? – KB22

4

Bạn cần đặt nó trong phần tử <Context> xác định ứng dụng web được đề cập.

Đối với Tomcat nó có thể là một số nơi, dưới mỗi webapp cụ thể (và webapp điều khiển) /META-INF/context.xml hoặc máy chủ cụ thể (và máy chủ điều khiển) /conf/[enginename]/[hostname]/context.xml hoặc máy chủ cụ thể toàn cầu /conf/context.xml hay các máy chủ cụ thể /conf/server.xml . Xem thêm Tomcat Context documentation.

2

Van Tomcat có thể được áp dụng cho toàn bộ Động cơ, Máy chủ hoặc một bối cảnh cụ thể (webapp). Bạn phải sử dụng nó cho toàn bộ ứng dụng, không phải đường dẫn hoặc thư mục cụ thể.

Bạn nên đặt nó trong META-INF/context.xml hoặc đoạn ngữ cảnh của bạn trong thư mục conf/Catalina/[host]. Ví dụ:

<Context path="/myapp" ...> 
    ... 
    <Valve className="org.apache.catalina.valves.RemoteAddrValve" 
     allow="10.1.2.*"/> 
</Context> 
+1

Hữu ích. Tôi có thể hạn chế trang web của tôi đến đúng khối IPv4 bằng cách thực hiện điều đó. Tuy nhiên, nó dường như không hoạt động cho IPv6. Có cách nào khác để làm điều đó, hay Tomcat vẫn chưa hỗ trợ đầy đủ IPv6? –

+0

@BrianKnoblauch, tomcat * có * hỗ trợ IPv6, xem [ngăn chặn truy cập-đến-nhất định-webapps-in-tomcat6] (http://stackoverflow.com/questions/2149719/prevent-access-to-certain-webapps- trong tomcat6) –

+0

Có vẻ như nó cần một Tomcat tùy chỉnh để hỗ trợ IPv6 (các tệp nhị phân dựng sẵn dường như không hỗ trợ nó). Cho đến nay không thể tìm thấy sự kết hợp đúng đắn của các phụ thuộc/tùy chọn để thực hiện xây dựng đầy đủ Tomcat với IPv6 làm việc. Vì vậy, có nó hỗ trợ nó, nhưng may mắn thực sự nhận được nó đi. ;-) –

3

Có nhu cầu tương tự như bạn (nhưng vì lý do khác) vào tuần trước và tạo van để chặn yêu cầu theo đường dẫn. Nó dựa trên số org.apache.catalina.valves.RequestFilterValve.

Cách sử dụng:

<Valve className="se.qbranch.tomcat.valve.BlockAccessByPathValve" path="/manager/.*" allow="127\.0\.0\.1"/>

Van có thể được sử dụng trong động cơ, Host hoặc bối cảnh cũng giống như bất kỳ van và có sẵn trên GitHub. http://github.com/xlson/tomcat-valves

Tôi khuyên bạn nên sử dụng các van tomcat hoặc bộ lọc servlet mặc định trong ứng dụng của bạn nếu giải quyết được sự cố của bạn. Lý do chúng tôi cần một van tùy chỉnh là một số phần của ứng dụng quản lý tomcat Psi-Probe sẽ "rò rỉ" mặc dù chúng tôi đã sử dụng RemoteAddrValve trong phần tử <Context> của ứng dụng.

Các vấn đề liên quan