对HttpServlet请求中的角色进行不区分大小写的检查



javax.servlet.http.HttpServletRequest类有一个名为isUserInRole的方法。例如,我使用它来检查用户是否具有admin角色。但是,该方法区分大小写。因此,如果请求中的角色是AdminADMIN,那么isUserInRole("admin")将为false。我在多个应用程序的多个地方使用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>

最新更新