I didn't try it but throwing UnsupportedOperationException in doGetAuthorizationInfo() looks suspicious to me, especially given that you are explicitly using role/url-based permissions. You should add the roles in doGetAuthorizationInfo() - you could simply return a static SimpleAccountInfo with the right roles and see if it makes a difference. I'm not convinced that creating SimpleAccount in doGetAuthenticationInfo() only would or should work.
Kalle On Mon, Aug 2, 2010 at 1:03 PM, Les Hazlewood <[email protected]> wrote: > Hi Suhail, > > Your config looks pretty good, but as of Shiro 1.0, there is no need > for a [filters] section anymore - all object/DI config should be in > [main]. > > Is there a test case or trivial test webapp you could attach to a Jira > issue that replicates the problem? If so, I can look at it right away > - I just don't have the time at the moment to write the test case > myself. > > Regards, > > Les > > On Sun, Aug 1, 2010 at 4:32 AM, Suhail Ahmed <[email protected]> wrote: >> Thanks for jumping in Armando. >> My web.xml look like the following, followed by my realm. The login page is >> the same that shipped with the example. I am running it under glassfish 3, >> compliant with the j2ee 6 spec. The realm does get invoked but then it >> doesn't load the resource under /account/* but just redisplays the same >> login page. >> >> <?xml version="1.0" encoding="UTF-8"?> >> <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" >> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >> xsi:schemaLocation="http://java.sun.com/xml/ns/javaee >> http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> >> <context-param> >> <param-name>javax.faces.PROJECT_STAGE</param-name> >> <param-value>Development</param-value> >> </context-param> >> <filter> >> <filter-name>ShiroFilter</filter-name> >> >> <filter-class>org.apache.shiro.web.servlet.IniShiroFilter</filter-class> >> <init-param> >> <param-name>config</param-name> >> <param-value> >> [main] >> matcher = >> org.apache.shiro.authc.credential.Sha256CredentialsMatcher >> mmer = prototype.security.shiro.realm.TreeRealm >> mmer.credentialsMatcher = $matcher >> [users] >> [roles] >> [filters] >> shiro.loginUrl = /login.xhtml >> shiro.successUrl = /home.xhtml >> [urls] >> # The /login.xhtml is not restricted to authenticated users >> (otherwise no one could log in!), but >> # the 'authc' filter must still be specified for it so it >> can process that url's >> # login submissions. It is 'smart' enough to allow those >> requests through as specified by the >> # shiro.loginUrl above. >> /login.xhtml = authc >> /account/** = authc, roles[admin] >> /remoting/** = authc, roles[b2bClient], >> perms["remote:invoke:lan,wan"] >> </param-value> >> </init-param> >> </filter> >> <filter-mapping> >> <filter-name>ShiroFilter</filter-name> >> <url-pattern>/*</url-pattern> >> </filter-mapping> >> <filter> >> <filter-name>Pretty Filter</filter-name> >> <filter-class>com.ocpsoft.pretty.PrettyFilter</filter-class> >> </filter> >> <filter-mapping> >> <filter-name>Pretty Filter</filter-name> >> <url-pattern>/u/*</url-pattern> >> <dispatcher>REQUEST</dispatcher> >> <dispatcher>FORWARD</dispatcher> >> <dispatcher>ERROR</dispatcher> >> </filter-mapping> >> <servlet> >> <servlet-name>Resource Servlet</servlet-name> >> >> <servlet-class>org.primefaces.resource.ResourceServlet</servlet-class> >> </servlet> >> <servlet> >> <servlet-name>Faces Servlet</servlet-name> >> <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> >> <load-on-startup>1</load-on-startup> >> </servlet> >> <servlet-mapping> >> <servlet-name>Faces Servlet</servlet-name> >> <url-pattern>/u/*</url-pattern> >> </servlet-mapping> >> <servlet-mapping> >> <servlet-name>Resource Servlet</servlet-name> >> <url-pattern>/primefaces_resource/*</url-pattern> >> </servlet-mapping> >> <persistence-context-ref> >> >> <persistence-context-ref-name>persistence/LogicalName</persistence-context-ref-name> >> <persistence-unit-name>opensocial</persistence-unit-name> >> </persistence-context-ref> >> <resource-ref> >> <res-ref-name>UserTransaction</res-ref-name> >> <res-type>javax.transaction.UserTransaction</res-type> >> <res-auth>Container</res-auth> >> </resource-ref> >> <session-config> >> <session-timeout> >> 30 >> </session-timeout> >> </session-config> >> <welcome-file-list> >> <welcome-file>index.xhtml</welcome-file> >> </welcome-file-list> >> </web-app> >> <<----------------- TreeRealm.java -------------------->> >> package prototype.security.shiro.realm; >> import java.util.logging.Level; >> import java.util.logging.Logger; >> import org.apache.shiro.authc.AuthenticationException; >> import org.apache.shiro.authc.AuthenticationInfo; >> import org.apache.shiro.authc.AuthenticationToken; >> import org.apache.shiro.authc.SimpleAccount; >> import org.apache.shiro.authc.UsernamePasswordToken; >> import org.apache.shiro.authc.credential.Sha256CredentialsMatcher; >> import org.apache.shiro.authz.AuthorizationInfo; >> import org.apache.shiro.realm.AuthorizingRealm; >> import org.apache.shiro.subject.PrincipalCollection; >> /** >> * >> * @author Suhail >> */ >> public class TreeRealm extends AuthorizingRealm { >> >> private static final Logger LOG = >> Logger.getLogger(TreeRealm.class.getName()); >> >> public TreeRealm(){ >> setCredentialsMatcher(new Sha256CredentialsMatcher()); >> setCachingEnabled(false); >> LOG.log(Level.INFO, "{0} Started", TreeRealm.class.getName()); >> } >> �...@override >> protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection >> pc) { >> throw new UnsupportedOperationException("Not supported yet."); >> } >> �...@override >> protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken >> at) throws AuthenticationException { >> UsernamePasswordToken upToken = (UsernamePasswordToken) at; >> SimpleAccount account = new SimpleAccount(upToken.getUsername(), >> upToken.getPassword(), getName()); >> account.addRole("admin"); >> account.addRole("user"); >> account.addStringPermission("/account/*:*"); >> return account; >> } >> } >> Thanks for your help again. >> Cheers >> su./hail >> On Sun, Aug 1, 2010 at 9:10 AM, armandoxxx <[email protected]> wrote: >>> >>> Some code would be nice ! >>> Kind regards >>> Armando >>> >>> On Sun, Aug 1, 2010 at 4:05 AM, Suhail Manzoor [via Shiro User] <[hidden >>> email]> wrote: >>>> >>>> Hi, >>>> I have been looking into Shiro to evaluate if it as a candidate for a >>>> project I am working on. I need to develop a realm which I did from the >>>> examples. I also need to integrate it with a JSF based application. I did >>>> the two things along with a login page. I have followed the Shiro web >>>> example to the letter except for using JSF instead of just jsp. But there >>>> seems to be a problem. After authenticating, the app doesn't display the >>>> protected page but keep displaying the login page. I have been trying to >>>> figure out whats been happening for a couple of days but no avail. Could >>>> anyone please help me. I really like the clean API shiro has and would like >>>> to use it going forward. >>>> Thank you very much >>>> su./hail >>>> >>>> ________________________________ >>>> View message @ >>>> http://shiro-user.582556.n2.nabble.com/Newbie-stuck-with-his-own-realm-please-help-tp5359975p5359975.html >>>> To start a new topic under Shiro User, email [hidden email] >>>> To unsubscribe from Shiro User, click here. >>> >>> >>> ________________________________ >>> View this message in context: Re: Newbie stuck with his own realm please >>> help >>> Sent from the Shiro User mailing list archive at Nabble.com. >> >> >
