HI,
Sorry it took me a while to get back to you but we had 4 feet of snow
last night and I had to dig out lol.
I think maybe I am going down the wrong path. I am using the Grails
Shiro plugin which appears to implement a DefaultWebSecurityManager
and that is the security manager I am picking up in the bootstrap
execution within grails. Now I don't think the bootstrap runs within
a request so I don't have request response available in the bootstrap
class just the servlet context. So no matter which type of subject i
create I get an error. In order to create a Websubject I need a
request and response which I do not have.
Object userIdentity = "admin";
String realmName = "localizedRealm";
PrincipalCollection principals = new
SimplePrincipalCollection(userIdentity, realmName);
Subject subject = new
WebSubject
.Builder
(shiroSecurityManager
,request,response).principals(principals).buildSubject();
ThreadState threadState = new SubjectThreadState(subject);
threadState.bind();
If I try to create a normal subject I get complaints from the security
manager that there is not request.
Object userIdentity = "admin";
String realmName = "localizedRealm";
PrincipalCollection principals = new
SimplePrincipalCollection(userIdentity, realmName);
Subject subject = new
Subject
.Builder(shiroSecurityManager).principals(principals).buildSubject();
ThreadState threadState = new SubjectThreadState(subject);
threadState.bind();
Is there a way to get a normal security manager from the shiro plugin
or do i need to create my own security manager for this case or can i
actually get a request and response from the bootstrap class in
grails. I am a little over my head at the level of the frameworks i
am at now.
Any ideas on what to explore next? I think this can be done I am just
missing one critical part.
Scott Ryan
President/CTO
Soaring Eagle L.L.C.
[email protected]
(303) 263-3044
On Oct 28, 2009, at 6:35 PM, Les Hazlewood wrote:
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 <[email protected]>
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/[email protected]/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.
[email protected]
(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 <[email protected]
>
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