[英]How to see who's logged in from server.xml file?
我已经在Java Spring应用程序中配置了server.xml文件,以便从数据库表和角色登录时对用户进行身份验证。 我想知道如何用Java代码检查谁登录了应用程序?
我知道在jsp文件中,我可以使用以下语法显示名称:
${pageContext.request.userPrincipal.name} .
在http://www.baeldung.com/spring-security-track-logged-in-users中提供了非常漂亮的文章
每当将用户信息添加到会话或从会话中删除用户信息时,您都可以利用HttpSessionBindingListener更新登录用户的列表,这取决于用户登录到系统或从系统注销。
它将侦听HttpSessionBindingEvent类型的事件,该事件在设置或删除值(即绑定到或未绑定到HTTP会话)时触发。
@Component
public class LoggedUser implements HttpSessionBindingListener {
private String username;
private ActiveUserStore activeUserStore;
public LoggedUser(String username, ActiveUserStore activeUserStore) {
this.username = username;
this.activeUserStore = activeUserStore;
}
public LoggedUser() {}
@Override
public void valueBound(HttpSessionBindingEvent event) {
List<String> users = activeUserStore.getUsers();
LoggedUser user = (LoggedUser) event.getValue();
if (!users.contains(user.getUsername())) {
users.add(user.getUsername());
}
}
@Override
public void valueUnbound(HttpSessionBindingEvent event) {
List<String> users = activeUserStore.getUsers();
LoggedUser user = (LoggedUser) event.getValue();
if (users.contains(user.getUsername())) {
users.remove(user.getUsername());
}
}
// standard getter and setter
}
你也可以使用Spring Security检索当前登录的用户通过这个ARTICAL去
或通过请求
request.getUserPrincipal().getName();
在您的Spring MVC Controller中,只需添加以下语句:
String loggedUser = request.getUserPrincipal().getName();
其中request
是HttpRequest
类型的对象,Spring可以根据需要提供给您。
您可以编写一种方法来获取当前登录的用户,因为您可能需要以下各种位置:
public User getCurrentLoggedInUser() {
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
if (auth != null) {
Object principal = auth.getPrincipal();
if (principal instanceof User) {
return ((User) principal);
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.