HttpServletRequest中对角色的大小写不敏感检查

10
javax.servlet.http.HttpServletRequest这个类有一个名为isUserInRole的方法,我使用它来检查用户是否具备例如admin的角色。但是此方法是区分大小写的。如果请求中的角色为AdminADMIN,则isUserInRole("admin")将返回false。我在多个应用程序中的多个位置使用isUserInRole方法来检查许多不同的角色。是否有一种方法可以实现不区分大小写的isUserInRole功能,而不需要使用isUserInRole检查每个可能的大小写组合?

1
为什么?你有困难一致地拼写你的角色名称吗? - user207421
我在不同的环境中使用第三方认证服务的多个版本,其中一个版本将角色名称转换为小写,而另一个版本保留大小写。 - Andrew Mairose
2个回答

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

快速搜索将找到大量的HTTPServletRequestWrapper示例...


3
只需将多个角色名称映射到管理员角色即可:

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 中设置了这种访问限制。 - Andrew Mairose

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接