2012-03-01 36 views
22

Ứng dụng web của tôi đang gặp sự cố kể từ khi nâng cấp lên Tomcat 7. Phiên của tôi sẽ đi null sau khi tôi đăng nhập và cố gắng làm bất cứ điều gì (gửi yêu cầu). Tôi đã đọc rằng cài đặt sau đây có thể giúp:Tomcat 7 - Tôi đặt 'thuộc tính hệ thống' ở đâu?

org.apache.tomcat.util.http.ServerCookie.FWD_SLASH_IS_SEPARATOR=false 

Có ai biết đặt thiết lập này ở đâu không? Điều này có nên được đặt trong web.xml, context.xml hoặc ở nơi khác không?

Những điều khác tôi muốn kiểm tra như sau:

org.apache.catalina.STRICT_SERVLET_COMPLIANCE 
+0

Tôi đọc phần sau, http://tomcat.apache.org/tomcat-7.0-doc/config/systemprops.html và tôi không xem bất kỳ thông tin nào về nơi đặt cài đặt này. Tôi chỉ cần biết cách đặt FWD_SLASH_IS_SEPARATOR thành false một cách chính xác. – LuckY07

+0

Ngoài ra, chúng tôi đang chạy trên một môi trường cửa sổ. – LuckY07

+0

@Michael - Ở đâu trong RUNNING.txt nó có hiển thị WHERE để đặt FWD_SLASH_IS_SEPARATOR không? Bạn đang đề cập đến cách nó cho bạn thấy làm thế nào để thiết lập các biến (trong cửa sổ) để setenv.bat? – LuckY07

Trả lời

3

CÁC GIẢI PHÁP:

sessionCookiePathUsesTrailingSlash="false" 

Chúng tôi thực sự đã tìm ra cách để giải quyết này. Đó là cài đặt Tomcat 7 mà chúng tôi cần thiết. Chúng tôi đặt nó trong server.xml, dưới thẻ như sau:

<Context path="/test" reloadable="true" docBase="c:\webapp\test" 
workDir="c:\webapp\test" sessionCookiePathUsesTrailingSlash="false"/> 

Khi chúng tôi gỡ rối vấn đề và nhìn vào con đường cookie chúng tôi nhận thấy nó được đặt một dấu chéo ngược \ sau tên webapp, vì vậy cho webapp thử nghiệm của chúng tôi nó đã đặt đường dẫn đến /test/ thay vì /test. Điều này gây ra một loạt các vấn đề.

Có ai khác phải đối phó với cài đặt này trong Tomcat 7 không? Hoặc có một vấn đề tương tự?

3

Bạn có thể đặt các thuộc tính hệ thống này trong dòng lệnh khởi động Tomcat. Ví dụ, bạn có thể có tập tin setenv.bat (trên setenv.sh nếu bạn đang ở trên linux) trong Tomcat bin thư mục với nội dung sau:

set "CATALINA_OPTS=%CATALINA_OPTS% -Dfile.encoding=UTF8 -Dorg.apache.catalina.STRICT_SERVLET_COMPLIANCE=true -Duser.timezone=GMT -Xmx1024m -XX:MaxPermSize=256m" 

Tập tin này là cách ưa thích của thiết lập các thuộc tính cho Tomcat.

Hiện tại, FWD_SLASH_IS_SEPARATOR theo mặc định được đặt thành false. Nếu bạn đặt STRICT_SERVLET_COMPLIANCE thành true, giá trị của FWD_SLASH_IS_SEPARATOR cũng sẽ được đặt thành true (và giá trị của một số thuộc tính khác). Tuy nhiên, bạn có thể đặt rõ ràng là false, ví dụ: bằng cách sử dụng sau đây trong tập tin setenv của bạn là tốt:

-Dorg.apache.catalina.STRICT_SERVLET_COMPLIANCE=true 
-Dorg.apache.tomcat.util.http.ServerCookie.FWD_SLASH_IS_SEPARATOR=false 

Đây cũng là những gì tôi đề nghị khi có người đặt STRICT_SERVLET_COMPLIANCE để true, để luôn luôn vô hiệu hóa các FWD_SLASH_IS_SEPARATOR. Nếu không, giá trị Đường dẫn cookie sẽ được gửi được trích dẫn (ví dụ: "\") và tất cả các trình duyệt kể từ hôm nay, ngoại trừ Opera, không nhận ra điều này và ví dụ: không theo dõi phiên.

25

Bạn có thể đặt bất kỳ thuộc tính hệ thống trong

apache-tomcat-7.0.33\conf\catalina.properties 

tập tin. Thêm mục nhập của bạn trong tệp này sẽ giải quyết được sự cố của bạn.

Ví dụ:

environment=local 
10

Bạn có thể đặt Thuộc tính hệ thống trong Tom cat bằng cách tạo tệp setenv.sh trong thư mục/bin. Tôi đã làm như sau để đặt thuộc tính hệ thống.

export JAVA_OPTS="-Dmyprojectvar.subname=value -Danothervariable=value -Danother.variable=value" 

Hãy nhớ rằng:

Không có khoảng trống giữa export JAVA_OPTS= và biểu tượng & là khác nhau, sử dụng ..

Bây giờ, hãy chạy catalina.sh của bạn để bắt đầu tomcat.

+2

Rất tiếc, bạn không thể đặt các giá trị ** bí mật ** (ví dụ: mật khẩu của cửa hàng tin cậy) theo cách đó mà không tiết lộ cho bất kỳ ai có thể đăng nhập và chạy 'ps' hoặc đọc/proc/*/cmdline. Xác định chúng trong catalina.properties tránh rò rỉ. Đây là một trong những lý do tại sao việc sử dụng các thuộc tính hệ thống tùy chỉnh để cấu hình mã servlet là một _bad idea_. Sử dụng các tham số ngữ cảnh để thay thế. –

+1

Ngoài báo trước được nâng lên bởi @MarkWood, kỹ thuật này sẽ chỉ hoạt động khi Tomcat được khởi chạy bằng cách sử dụng các tập lệnh khởi động. Nếu bạn sử dụng một cơ sở khác để khởi chạy Tomcat (ví dụ như một "Dịch vụ Microsoft Windows"), các kịch bản như 'bin/setenv.sh | bat' sẽ bị bỏ qua. Sử dụng 'catalina.properties' đảm bảo rằng các thuộc tính hệ thống được đặt bất kể cách Tomcat được khởi chạy. –

1

Nếu bạn đang cố gắng để thiết lập các biến cho một máy chủ đang chạy trong nhật thực:

  1. Chọn Run> Run Configurations
  2. Hãy chắc chắn rằng máy chủ của bạn được chọn
  3. Chọn Tab Môi trường
  4. Nhấp vào 'mới 'để thêm biến mới
Các vấn đề liên quan