利用HttpServletRequestWrapper封装用户身份信息

Java标准的HttpServletRequest中有2个方法。
request.getRemoteUser();request.getUserPrincipal();,用来获取已登录的用户身份信息

但是,我们在servelt中直接获取的话,得到的都是null,怎么才能把用户信息封装进去了。

这里,要用到HttpServletRequestWrapper这个类了,如下图。实际上,这个类实现了HttpServletRequest接口

通过集成和重写HttpServletRequestWrapper类的方法,我们可以把用户身份封装进去了。

CAS的单点登录系统,就是通过这种机制封装进去的。

抛砖引玉,这是我写的一个例子。通过new RequestWrapper这个类,我们可以把用户身份标识封装进去, getRemoteUser()就可以获取到了,这里面可以做的东西很多,如果是单点登录的话,代码中访问单点登录系统,即可判断用户身份。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class RequestWrapper extends HttpServletRequestWrapper {
private String user;
/**
*
*/
public RequestWrapper(final HttpServletRequest request, final String user) {
super(request);
this.user = user;
}
public String getRemoteUser() {
return user != null ? user : null;
}
}

至于在什么地方new 我们自己这个类,过滤器和拦截器都是可以的。