On 21/11/2016 10:45, Osipov, Michael wrote: > Hi folks, > > I am currently porting our custom Tomcat components from 6.0 to 8.5.8+ and > need > to clarify some possible inconsistencies for new/changed roles "*" and "**" > from Servlet 3.1, section 13 how Tomcat implements this behavior. > > org.apache.catalina.connector.Request#isUserInRole(String) properly handles > "*" > (this has changed) and "**" according to the spec. It handles it off to > Realm#hasRole(). RealmBase delegates this decision to > GenericPrincipal#hasRole(String) but this likely violates the spec in my > opinion by >> if ("*".equals(role)) {// Special 2.4 role meaning everyone >> return true; >> } > as well as the UserDatabaseRealm#hasRole(Wrapper, Principal, String): >> if("*".equals(role)) { >> return true; >> } > > Since we are using a custom realm and principal, my questions are: > > 1. According to the specs, "*" should never be passed to the request or > principal. > It should rather be handled by the container checking whether the user has > any > of the declared roles and match in that case. Are GenericPrincipal and > UserDatabaseRealm violating these specs?
Yes. They also ignore "**" and RealmBase.allRolesMode I'd consider removing RealmBase.allRolesMode for 9.0.x onwards. Mark > It should be as little as: > public boolean hasRole(String role) { > return Arrays.binarySearch(roles, role) >= 0; > } > Null check and else is done by the realm already. > 2. How should CustomPrincipal#hasRole(String) and > CustomRealm#hasRole(Wrapper, Principal, String) > look like to satisfy the behavior without breaking the specs? > It is currently a mere copy and paste from GenericPrincipal#hasRole() > and RealmBase#hasRole() in our code. > > Best regards, > > Michael > > --------------------------------------------------------------------- > To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org > For additional commands, e-mail: users-h...@tomcat.apache.org > --------------------------------------------------------------------- To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org For additional commands, e-mail: users-h...@tomcat.apache.org