不区分大小写检查 HttpServletRequest 中的角色

Case insensitive check for role in HttpServletRequest

javax.servlet.http.HttpServletRequest class 有一个名为 isUserInRole 的方法。例如,我用它来检查用户是否具有 admin 角色。但是,该方法区分大小写。因此,如果请求中的角色是 AdminADMIN,则 isUserInRole("admin") 将为假。我在多个应用程序的多个位置使用 isUserInRole 方法来检查多个不同的角色。

有没有一种方法可以不区分大小写地实现 isUserInRole 功能,不需要用 isUserInRole 检查每个不同的可能大小写组合?

您可以使用 HttpServletRequestWrapper 实现一个包装请求的过滤器 - 实现您的 HttpServletRequestWrapper 以覆盖 isUserInRole() 方法以使其不区分大小写(例如,将所有角色配置为大写,通过转换为大写来测试角色参数)。

快速搜索会发现大量 HTTPServletRequestWrapper 示例...

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>