Bạn cần phải thu thập tất cả người dùng đăng nhập trong một Set<User>
trong ứng dụng phạm vi. Chỉ cần móc vào login
và logout
và thêm và xóa User
tương ứng. Về cơ bản:
public void login(User user) {
// Do your business thing and then
logins.add(user);
}
public void logout(User user) {
// Do your business thing and then
logins.remove(user);
}
Nếu bạn đang lưu trữ người dùng đã đăng nhập trong phiên, thì bạn muốn thêm một móc khác trên phiên hủy để đăng xuất khỏi bất kỳ người dùng đã đăng nhập nào. Tôi không chắc chắn về cách Grails phù hợp trong hình ảnh, nhưng nói trong Java Servlet API, bạn muốn sử dụng HttpSessionListener#sessionDestroyed()
cho việc này.
public void sessionDestroyed(HttpSessionEvent event) {
User user = (User) event.getSession().getAttribute("user");
if (user != null) {
Set<User> logins = (Set<User>) event.getSession().getServletContext().getAttribute("logins");
logins.remove(user);
}
}
Bạn cũng có thể chỉ cần để mô hình User
triển khai HttpSessionBindingListener
. Các phương thức được triển khai sẽ được gọi tự động bất cứ khi nào cá thể User
được đưa vào phiên làm việc hoặc bị loại bỏ khỏi nó (điều này cũng sẽ xảy ra khi hủy phiên).
public class User implements HttpSessionBindingListener {
@Override
public void valueBound(HttpSessionBindingEvent event) {
Set<User> logins = (Set<User>) event.getSession().getServletContext().getAttribute("logins");
logins.add(this);
}
@Override
public void valueUnbound(HttpSessionBindingEvent event) {
Set<User> logins = (Set<User>) event.getSession().getServletContext().getAttribute("logins");
logins.remove(this);
}
// @Override equals() and hashCode() as well!
}
URL này yêu cầu đăng nhập, vì vậy nó vô dụng cho bất cứ ai không phải là hoặc sẽ không đăng ký trên trang web đó. – BalusC
@BalusC Câu hỏi được cập nhật – fabien7474