Tôi đang cố gắng để Realms tổ như sau trong Tomcat 7.0.32 (viết ở đây trong pseudo-XML):Tomcat 7 tổ CombinedRealm, LockoutRealm và DataSourceRealm
<CombinedRealm>
<LockoutRealm>
<DataSourceRealm/>
</LockoutRealm>
<UserDatabaseRealm/>
</CombinedRealm>
này dường như không làm việc - được có thể làm tổ ở cõi Tomcat bằng hơn hai cấp độ? Tôi nhận được một cảnh báo trong các bản ghi:
No rules found matching 'Server/Service/Engine/Realm/Realm/Realm'.
Ý tưởng đằng sau là các dịch vụ web có một số người dùng quan trọng là không được khóa ra (ví dụ như một hệ điều hành DOS) và một số người dùng bình thường, có thể có mật khẩu yếu, nơi lockoutRealm sẽ hoạt động. Tôi chắc rằng những người khác đã ở trong tình huống này.
Nếu có cách khác để đạt được điều này (ví dụ: danh sách cho phép của LockoutRealm), vui lòng cho tôi biết.
Đăng nhập một lần cũng là cần thiết.
Tôi đoán việc mở rộng mã LockoutRealm hiện tại bằng danh sách tài khoản không bao giờ khóa sẽ là một tùy chọn, nhưng tôi không muốn viết lĩnh vực của riêng mình, tôi không muốn thêm mã tùy chỉnh ở cấp đó vào Tomcat , vì điều này sẽ làm phức tạp thiết lập cho người khác và với mọi bản cập nhật Tomcat, nó có thể bị hỏng, v.v.
Cảm ơn bạn đã trợ giúp!
Dưới đây là phần có liên quan của server.xml của cấu hình thử nghiệm của tôi:
<Engine name="Catalina" defaultHost="localhost">
<Realm className="org.apache.catalina.realm.CombinedRealm">
<!-- Lockout realm for the DB users -->
<Realm className="org.apache.catalina.realm.LockOutRealm">
<!-- PRIMARY: DataSourceRealm with user DB -->
<Realm className="org.apache.catalina.realm.DataSourceRealm"
dataSourceName="jdbc/authority"
userTable="user" userNameCol="username"
userCredCol="password" digest="SHA"
userRoleTable="user_role" roleNameCol="rolename" />
</Realm>
<!-- FALLBACK:
This Realm uses the UserDatabase configured in the global JNDI
resources under the key "UserDatabase". Any edits
that are performed against this UserDatabase are immediately
available for use by the Realm. -->
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
</Realm>
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<!-- SingleSignOn valve, share authentication between web applications
Documentation at: /docs/config/valve.html -->
<Valve className="org.apache.catalina.authenticator.SingleSignOn" />
<!-- Access log processes all example.
Documentation at: /docs/config/valve.html
Note: The pattern used is equivalent to using pattern="common" -->
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log." suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
</Engine>
Christopher, cảm ơn rất nhiều vì câu trả lời tuyệt vời! Ngoài ra tôi sẽ có một cái nhìn vào danh sách người dùng (có thể là lúc tôi đăng ký ở đó, chỉ có tôi phải làm với quá nhiều công nghệ khác nhau để đăng ký tất cả các danh sách người dùng ...). Có vẻ như tôi sẽ không thể tránh thay đổi/mở rộng mã Tomcat, trừ khi mã chính thức sẽ hỗ trợ các cấp lồng nhau tùy ý trong tương lai gần. Nếu tôi cần bắt đầu thay đổi mã Tomcat, tôi có thể sẽ mở rộng LockoutRealm bằng tùy chọn loại trừ tên người dùng - hoặc bạn có biết liệu có bất kỳ điều gì tương tự tồn tại không? Cảm ơn! – FelixD
Tôi đã đăng nhập [báo cáo lỗi cho điều này] (https://issues.apache.org/bugzilla/show_bug.cgi?id=54141). –
Tuyệt vời, cảm ơn Christopher! Xin lỗi vì đã không tự mình làm điều này, một chút căng thẳng ở đây vào lúc này ... – FelixD