https://bz.apache.org/bugzilla/show_bug.cgi?id=60469

            Bug ID: 60469
           Summary: RealmBase#hasRole() imposes too much boilerplate code
                    if principal is not of type GenericPrincipal
           Product: Tomcat 8
           Version: 8.5.x-trunk
          Hardware: All
                OS: All
            Status: NEW
          Severity: major
          Priority: P2
         Component: Catalina
          Assignee: dev@tomcat.apache.org
          Reporter: 1983-01...@gmx.net
  Target Milestone: ----

If your custom realm extends RealmBase but uses a custom principal, just like
mine, you need to duplicate the entire #hasRole(Wrapper, Princpal, String)
method.

The only interesting part for an implementor is
!(principal instanceof GenericPrincipal)
and
GenericPrincipal gp = (GenericPrincipal) principal;
boolean result = gp.hasRole(role);

A verbatim copy of the method is need just to adapt three lines. Which
basically means to double-check every Tomcat release for changes in this
method.

I am proposing to introduce a new sub-method: hasRoleInternal(Wrapper,
Principal, String) (or alike) which performs just the code above. The entire
boilerplate code remains in #hasRole()

My custom realm would simply do:

public boolean hasRoleInternal(Wrappr wrapper, Principal principal, String
role) {
  if(!(principal instanceof CustomPrincipal))
    return false;

  CustomPrincipal cp = (CustomPrincipal) principal;
  return cp.hasRole(role);
}

I can provide a patch for that if you agree with.

-- 
You are receiving this mail because:
You are the assignee for the bug.
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to