对 HttpServletRequest 中的角色进行不区分大小写的检查
Posted
技术标签:
【中文标题】对 HttpServletRequest 中的角色进行不区分大小写的检查【英文标题】:Case insensitive check for role in HttpServletRequest 【发布时间】:2016-03-15 02:38:24 【问题描述】:javax.servlet.http.HttpServletRequest
类有一个名为isUserInRole
的方法。例如,我使用它来检查用户是否具有admin
角色。但是,该方法区分大小写。因此,如果请求中的角色是Admin
或ADMIN
,那么isUserInRole("admin")
将是错误的。我在多个应用程序的许多地方使用isUserInRole
方法来检查许多不同的角色。
有没有一种方法可以不区分大小写地实现isUserInRole
功能,而不需要使用isUserInRole
检查每个不同的可能大小写组合?
【问题讨论】:
为什么?您在拼写角色名称时遇到问题? 我在不同的环境中使用了多个版本的第三方身份验证服务,其中一个是小写的角色名称,而另一个保留大小写。 【参考方案1】:您可以使用HttpServletRequestWrapper
实现包装请求的过滤器 - 实现您的 HttpServletRequestWrapper 以覆盖 isUserInRole()
方法以使其不区分大小写(例如,将所有角色配置为大写,通过转换为来测试角色参数大写)。
快速搜索会发现大量 HTTPServletRequestWrapper 示例...
【讨论】:
【参考方案2】:http://docs.oracle.com/javaee/6/tutorial/doc/gjiie.html
只需将多个角色名称映射到管理员角色:
<servlet>
<security-role-ref>
<role-name>admin</role-name>
<role-link>admin</role-link>
</security-role-ref>
<security-role-ref>
<role-name>Admin</role-name>
<role-link>admin</role-link>
</security-role-ref>
</servlet>
<security-role>
<role-name>admin</role-name>
</security-role>
【讨论】:
对isUserInRole
的调用用于根据角色在rest端点上执行不同的代码路径。我们已经在 web.xml 中设置了这种访问限制。以上是关于对 HttpServletRequest 中的角色进行不区分大小写的检查的主要内容,如果未能解决你的问题,请参考以下文章
对HttpServletRequest中的Header进行增删
继承HttpServletRequestWrapper以实现在Filter中修改HttpServletRequest的参数
JavaWeb-Servlet笔记--- Servlet规范;Servlet接口实现类;Servlet对象生命周期;HttpServletResponse/HttpServletRequest;请求对