application server如何识别用户角色?基于web.xml配置的角色存储疑问
容器存储角色信息的逻辑
根据你使用的认证方式不同,存储位置有明显区别:
- 你示例中使用的是
BASIC认证,这种认证本身是无状态设计:- 浏览器会将用户输入的用户名、密码做Base64编码后,附加在每一次后续请求的
Authorization请求头中发送给服务器 - 容器不会持久存储用户的角色信息,每次收到请求后都会先解码
Authorization头的账号密码,和配置的Realm(你这里用的是数据库Realm)做校验,同时查询对应用户的角色,再判断是否有当前资源的访问权限。查询到的角色信息会临时放在本次请求的HttpServletRequest对象中,请求处理完成后就会销毁。
- 浏览器会将用户输入的用户名、密码做Base64编码后,附加在每一次后续请求的
- 如果你使用的是
FORM表单认证、Digest认证这类会话绑定的认证方式:- 容器会在用户首次登录校验通过后,将用户身份、对应角色信息都存储在服务端的
HttpSession对象中 - 后续请求到达时,容器会通过请求携带的
JSESSIONID匹配到对应的Session,直接取出存储的角色信息做权限校验,不需要每次都查询数据源。
- 容器会在用户首次登录校验通过后,将用户身份、对应角色信息都存储在服务端的
额外补充:不管用哪种认证方式,校验完成的角色信息都会临时绑定到当前请求的线程上下文里,方便容器在整个请求处理链路中做权限判断,请求处理结束后会自动清除线程上下文的绑定信息,避免容器线程复用时出现身份串用的问题。
内容的提问来源于stack exchange,提问作者user2125853
相关产品推荐
相关产品推荐

