shiro-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Les Hazlewood <lhazlew...@apache.org>
Subject Re: [grails-user] Shiro Subject Builder use in grails bootstrap
Date Thu, 29 Oct 2009 00:35:28 GMT
Hi Scott,

Good catch on the build() mistake.  I've updated the wiki.  I also
made some changes to break out the Thread Association sections into 3
approaches (not 2).  Please check it again (I _just_ finished these
changes like 2 minutes ago) and see if that helps.

Also, you caught an interesting scenario and I updated the wiki to
note this scenario - you're absolutely right that the standard
Subject.Builder can't be used during a web request.  Because the
Subject and Subject.Builder have no knowledge of web APIs to ensure a
clean separation of concerns, the WebSubject and WebSubject.Builder
exist for this reason.

They are located in the org.apache.shiro.web.subject package and are
used in the exact same way:

Subject subject = WebSubject.Builder(...). ... .buildSubject();

Also, per the wiki documentation, just building the Subject instance
is not enough - it must be bound to the currently executing thread so
any SecurityUtils.getSubject() calls work properly.  The wiki page I
wrote covers all 3 approaches to show you how to do this.

I recommend that you use the "Automatic Association" approach - it is
the easiest to use.

Let me know how that goes!

Cheers,

Les

On Wed, Oct 28, 2009 at 7:54 PM, Scott Ryan <sryan737@gmail.com> wrote:
> Thank you for the information.  I am close but still scratching my head on
> what is wrong.
>
> Note there is a line in the wiki help that reads
>
> Subject subject = new Subject.Builder().principals(principals).build();
>
> but should it not read
>
> Subject subject = new
> Subject.Builder().principals(principals).buildSubject();
>
>
> So here is what I have so far in my bootstrap.groovy
>
> class BootStrap
> {
>    def shiroSecurityManager
> def init =
>    {servletContext ->
>        void buildSubject()
>        {
>            Object userIdentity = "admin";
>            String realmName = "localizedRealm";
>            PrincipalCollection principals = new
> SimplePrincipalCollection(userIdentity, realmName);
>            Subject subject = new
> Subject.Builder(shiroSecurityManager).principals(principals).buildSubject();
>   // This is line 164
>        }
>    }
> }
>
> I assume since I am in a servletContext it is a web request and therefore I
> don't have to bind the subject to the Thread?
>
> I am getting the following errors:
>
> Caused by: java.lang.IllegalStateException: ServletRequest is not available!
>  A ServletRequest must be present in either the Subject context map, on an
> existing WebSubject or via the thread context.  This exception is probably
> indicative of an erroneous application configuration.
>        at
> org.apache.shiro.web.mgt.DefaultWebSubjectFactory.getServletRequest(DefaultWebSubjectFactory.java:72)
>        at
> org.apache.shiro.web.mgt.DefaultWebSubjectFactory.getInetAddress(DefaultWebSubjectFactory.java:108)
>        at
> org.apache.shiro.web.mgt.DefaultWebSubjectFactory.createSubject(DefaultWebSubjectFactory.java:118)
>        at
> org.apache.shiro.mgt.DefaultSecurityManager.createSubject(DefaultSecurityManager.java:347)
>        at
> org.apache.shiro.subject.Subject$Builder.buildSubject(Subject.java:684)
>        at BootStrap.buildSubject(BootStrap.groovy:164)
>        at BootStrap$_closure1.doCall(BootStrap.groovy:108)
>
>
> Is there something I am missing in the setup?
>
> It looks like the following thread discusses this but it is unclear on the
> solution
>
> http://www.mail-archive.com/shiro-dev@incubator.apache.org/msg00172.html
>
> It is to hard to locate any of the referenced classes as they seem to keep
> moving packages and there is no javadoc to help me find them.   i can't even
> find the SVN repo to look there.  I assume I am supposed to use
> WebSubjectBuilder instead of the above but not sure how.  What package is
> WebSubjectBuilder in currently?
>
> The next step is to insert data in to the database using the subject that
> was created.
>
>
>
> Scott Ryan
> President/CTO
> Soaring Eagle L.L.C.
> scott@theryansplace.com
> (303) 263-3044
>
> On Oct 28, 2009, at 4:04 PM, Les Hazlewood wrote:
>
>> Hi Scott,
>>
>> Yep, this is a new feature available in Shiro 1.0.  In an effort to
>> create good documentation (and so I don't get lazy and rely on
>> archived mailing lists as documentation - yuck!), I've documented this
>> extensively here:
>>
>> http://cwiki.apache.org/confluence/display/SHIRO/Subject
>>
>> Please feel free to offer suggestions or ask questions.
>>
>> Cheers,
>>
>> Les
>>
>> On Wed, Oct 28, 2009 at 2:48 PM, Peter Ledbrook <peter@cacoethes.co.uk>
>> wrote:
>>>>
>>>> Here is the thread I am referring to
>>>>
>>>>
>>>> http://www.nabble.com/BootStrapping-a-class-that-requires-a-Session-for-beforeInsert-to-work-td25788207.html
>>>
>>> It's javadoced well, but the docs aren't online yet as far as I can
>>> tell. If you can read native javadoc format:
>>>
>>>
>>>  http://svn.apache.org/repos/asf/incubator/shiro/trunk/core/src/main/java/org/apache/shiro/subject/Subject.java
>>>
>>> Otherwise, I'll leave it to Les to answer this one (I've never used
>>> Subject.Builder).
>>>
>>> Cheers,
>>>
>>> Peter
>>
>> ---------------------------------------------------------------------
>> To unsubscribe from this list, please visit:
>>
>>   http://xircles.codehaus.org/manage_email
>>
>>
>
>
> ---------------------------------------------------------------------
> To unsubscribe from this list, please visit:
>
>   http://xircles.codehaus.org/manage_email
>
>
>

Mime
View raw message