不区分大小写检查 HttpServletRequest 中的角色
Case insensitive check for role in HttpServletRequest
javax.servlet.http.HttpServletRequest
class 有一个名为 isUserInRole
的方法。例如,我用它来检查用户是否具有 admin
角色。但是,该方法区分大小写。因此,如果请求中的角色是 Admin
或 ADMIN
,则 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>
javax.servlet.http.HttpServletRequest
class 有一个名为 isUserInRole
的方法。例如,我用它来检查用户是否具有 admin
角色。但是,该方法区分大小写。因此,如果请求中的角色是 Admin
或 ADMIN
,则 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>