2015-12-09 49 views
10

javax.servlet.http.HttpServletRequest类有一个名为isUserInRole的方法。我用它来检查用户是否具有admin角色。但是,该方法区分大小写。所以,如果请求中的角色是AdminADMIN,那么isUserInRole("admin")将是错误的。我在多个应用程序的许多地方使用isUserInRole方法来检查许多不同的角色。对HttpServletRequest中角色的大小写不敏感检查

是否有办法不区分大小写地实现isUserInRole功能,而不需要检查每个与isUserInRole不同的可能情况组合?

+0

为什么?你无法一致地拼写你的角色名称? – EJP

+0

我在不同的环境中使用第三方身份验证服务的多个版本,其中一个小于角色名称,另一个保留大小写。 –

回答

13

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

快速搜索会发现很多例子了HttpServletRequestWrapper ...

3

http://docs.oracle.com/javaee/6/tutorial/doc/gjiie.html

只是多个角色名admin角色映射:

<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> 
+0

对'isUserInRole'的调用用于根据角色在休息端点上执行不同的代码路径。我们在web.xml中已经有了这种设置来限制访问。 –