Tôi cần phải theo dõi địa chỉ IP khi người dùng đăng nhập vào ứng dụng mùa xuân của tôi.Làm thế nào để lưu địa chỉ IP vào một DB từ người dùng đã được xác thực với bảo mật mùa xuân?
security.xml:
<authentication-manager alias="authenticationManager">
<authentication-provider user-service-ref="userService">
<password-encoder ref="passwordEncoder">
<salt-source user-property='username' />
</password-encoder>
</authentication-provider>
với đậu:
<beans:bean id="passwordEncoder"
class="org.springframework.security.authentication.encoding.ShaPasswordEncoder">
<beans:constructor-arg value="512" />
</beans:bean>
Tôi đã một userService tùy chỉnh với một loadUserByUsername() phương pháp trả lại một UserDetails tùy chỉnh. Phương thức này lấy UserDetails từ cơ sở dữ liệu, thông qua DAO. UserDetails chứa các nội dung liên quan đến người dùng, chẳng hạn như tên người dùng, mật khẩu, quyền hạn, địa chỉ email của bạn, mà cả các biến dành riêng cho ứng dụng. Tôi cần truy cập các biến này trong các trang JSP của tôi.
Tôi muốn lưu vào cơ sở dữ liệu (thông qua cuộc gọi đến phương thức trong dịch vụ tùy chỉnh, gọi phương thức DAO) địa chỉ ip, dấu thời gian và id người dùng khi người dùng được xác thực thành công trong ứng dụng của tôi.
Tôi không biết phải làm gì: tôi có nên triển khai nhà cung cấp xác thực tùy chỉnh không? mở rộng DaoAuthenticationProvider? hoặc AbstractUserDetailsAuthenticationProvider? hoặc cái gì khác?
Nhiều câu hỏi chung:
A. Tôi có thể thêm đâu một phương pháp để gọi khi người dùng cung cấp các thông tin đúng không?
B. Làm cách nào để truy xuất địa chỉ IP của người dùng? (biết rằng tomcat chạy phía sau apache trong một proxy ngược lại).
Tôi đã cố gắng xem xét các câu hỏi/câu trả lời có liên quan, nhưng điều đó khiến tôi bối rối hơn. Nếu ai đó có thể cung cấp một bước thực hiện rất đơn giản, nó sẽ là tuyệt vời. cảm ơn!
Cảm ơn bạn! Đó thực sự là những gì tôi cần. Tôi đã mở rộng SavedRequestAwareAuthenticationSuccessHandler và thêm mã của tôi để lưu địa chỉ ip cho phù hợp. Tuy nhiên, tôi đang chạy tomcat với apache như một proxy ngược lại. Do đó tôi chỉ thấy địa chỉ IP cục bộ (127.0.0.1). Làm thế nào để bạn chỉ định để thêm địa chỉ IP đúng như một tiêu đề yêu cầu trong apache? và làm thế nào để bạn nhận được địa chỉ ip đó trong authenticationSuccessHandler? cảm ơn! – awesome
Thử 'String ip = request.getHeader (" X-Forwarded-For ")'. Nếu IP của khách hàng không được gửi bởi Apache thì hãy xem plugin [this] (http://httpd.apache.org/docs/trunk/mod/mod_remoteip.html). –