I generally avoid the session like the plague as well, but for managing 
security information in web applications with a human user (i.e. not services), 
I use the session in most cases.

Security for services (REST, WS, etc.) is definitely a different story. I 
generally authenticate each request for services and keep them completely 
stateless. Sometimes I use a local credential cache, just to speed up multiple 
calls that might hit the same box. Other than that, I generally just hit the DB 
since it is much simpler than setting up a distributed cache and not a huge 
performance hit.

-bp


On Dec 2, 2009, at 1:38 PM, Eduardo Nunes wrote:

> exactly, the idea is to avoid JEE clustering and the http load balancer. It's 
> for stateless applications. It's true I have to think in a better way to 
> implement this local cache. I my last applications I haven't use JEE stack, 
> at least during the development. I'm using just 
> jetty+guice+warp-persist+dwr+javascript. One of the requirements was the 
> statelessness of the application, if I need to temporary save something, I do 
> it on the client using javascript, if it's a private thing, I do it using 
> encrypted cookies. All those things can sound strange at first thought but it 
> improved a lot the development speed due to the fact that everything 
> integrates with guice, every object is managed by guice.
> 
> On Wed, Dec 2, 2009 at 6:21 PM, Brian Pontarelli <[email protected]> wrote:
> Are you specifically trying to avoid JEE clustering and HTTP load balancer 
> pinning? 
> 
> The reason I ask is that you case might not be the norm for most 
> applications. And you still need to contend with distributed caching for 
> session and credentials. I would abstract out this "cache" as an interface 
> and provide the default implementation as the HttpSession. That way folks can 
> get up and running easily and you can provide a different (distributed cache) 
> implementation for your case.
> 
> -bp
> 
> 
> On Dec 2, 2009, at 1:16 PM, Eduardo Nunes wrote:
> 
>> Yes, the session cookies wasn't a good option in this case, it was something 
>> temporary, I think that I will change it to a cache system like ehcache or 
>> jcs. The idea behind is to provide a long lived user authentication and a 
>> way to spread the application in a cluster without replication of the 
>> session, because the session was just to work as a cache (forget about it). 
>> I will try to put the source code in google code today, afterwards I will 
>> reply this e-mail with the url to access it.
>> 
>> Thanks
>> 
>> On Wed, Dec 2, 2009 at 4:43 PM, Brian Pontarelli <[email protected]> 
>> wrote:
>> Seems a bit complex considering session cookies and JEE session handling is 
>> automatic. Any particular reason you aren't just leveraging the JEE session 
>> directly and storing the current user ID and roles in the session, fetching 
>> them out each request and then handling the AOP based on that? If you are 
>> using a Servlet Session scope, you can by-pass some of the ThreadLocal, 
>> depending on whether or not you need access to the current user in other 
>> scopes or not and if you need access to it in non-guice places (such as JPA 
>> PrePersist, PreUpdate methods).
>> 
>> -bp
>> 
>> 
>> On Dec 2, 2009, at 11:35 AM, Eduardo Nunes wrote:
>> 
>>> I've created a simple framework to deal with security. I've created a 
>>> interface named SecurityContext. This interface holds the user id and a set 
>>> of roles (strings). This class has a Servlet Session scope. The idea of the 
>>> session scope is to work on it just as a cache, the valid information I 
>>> store on a cookie using blowsfish algorithm, so the application uses the 
>>> session as a cache and the timeout of the login you can define inside the 
>>> cookie. This framework will be public soon, as soon as I finish the 
>>> annotation part to check the current user roles.
>>> Let me know if I was confuse in this explanation, I'm writing it fast not 
>>> thinking too much..
>>> 
>>> 
>>> On Wed, Dec 2, 2009 at 3:24 PM, Brian Pontarelli <[email protected]> 
>>> wrote:
>>> Yeah, that's the basic gist of it. You definitely don't want to use a 
>>> Singleton for managing the current user, otherwise you can only have a 
>>> single person logged in :) Otherwise, this is pretty much what you need. 
>>> You probably want to make the annotations more flexible as well and I would 
>>> abstract out the whole login and current user process into some type of JEE 
>>> filter system. JCatapult uses a filter type of system via like Spring does 
>>> where it transfers control from the JEE filter into a JCatapult workflow 
>>> chain. That way the workflows can be injected thereby allowing everything 
>>> running inside the web application (less the single JEE filter) to be 
>>> injected.
>>> 
>>> -bp
>>> 
>>> 
>>> On Dec 2, 2009, at 9:15 AM, Alexandre Walter Pretyman wrote:
>>> 
>>> > Hi,
>>> >
>>> > I stumbled upon a very interesting post on using AOP on Guice for
>>> > security. It might be helpful to you:
>>> >
>>> > http://jpz-log.info/archives/2009/11/04/guice-it-up-or-aop-can-be-made-simple-sometimes/
>>> >
>>> > it is written by an author who identifies himself as jponge, but I
>>> > couldn't find out his real name.
>>> >
>>> > Definitely worth a read.
>>> >
>>> > Alex.
>>> >
>>> > On Dec 1, 3:04 pm, Brian Pontarelli <[email protected]> wrote:
>>> >> Spring Security covers the login and web security as well as the object 
>>> >> level security.
>>> >>
>>> >> In terms of the login and web security, I wrote this stuff myself for 
>>> >> JCatapult. It was pretty simple in general, but the gist is that a 
>>> >> Servlet filter looks for a specific URL (i.e. /jcatapult-security-check) 
>>> >> and then uses a well defined class to perform the login. You can also 
>>> >> write a URI authorizer as well to verify that a user has specific roles 
>>> >> and which roles can access a specific URI.
>>> >>
>>> >> In terms of object level security, this is just a matter of writing a 
>>> >> bit of AOP to check the users privileges prior to invoking a method. The 
>>> >> way I handle this that during login, I stuff the User object into the 
>>> >> session. Each request in my security filter I pull it out and stuff it 
>>> >> into a ThreadLocal. Then, I just pull the User from the ThreadLocal and 
>>> >> inspect it in a MethodInterceptor based on an annotation on the method.
>>> >>
>>> >> I find it is generally pretty simple to write all this stuff in a 
>>> >> library that I can re-use across projects. You can check out the code in 
>>> >> the JCatapult Security library to get an idea of how I did it all:
>>> >>
>>> >>        
>>> >> http://code.google.com/p/jcatapult/source/browse/#svn/jcatapult-secur...
>>> >>
>>> >> -bp
>>> >>
>>> >> On Dec 1, 2009, at 9:09 AM, severin wrote:
>>> >>
>>> >>> What would be the best way to manage security and user roles with
>>> >>> google guice ? (like spring security for example)
>>> >>
>>> >>> Thank you for your answers !
>>> >>
>>> >>> Severin
>>> >>
>>> >>> --
>>> >>
>>> >>> You received this message because you are subscribed to the Google 
>>> >>> Groups "google-guice" group.
>>> >>> To post to this group, send email to [email protected].
>>> >>> To unsubscribe from this group, send email to 
>>> >>> [email protected].
>>> >>> For more options, visit this group 
>>> >>> athttp://groups.google.com/group/google-guice?hl=en.
>>> >
>>> > --
>>> >
>>> > You received this message because you are subscribed to the Google Groups 
>>> > "google-guice" group.
>>> > To post to this group, send email to [email protected].
>>> > To unsubscribe from this group, send email to 
>>> > [email protected].
>>> > For more options, visit this group at 
>>> > http://groups.google.com/group/google-guice?hl=en.
>>> >
>>> >
>>> 
>>> --
>>> 
>>> You received this message because you are subscribed to the Google Groups 
>>> "google-guice" group.
>>> To post to this group, send email to [email protected].
>>> To unsubscribe from this group, send email to 
>>> [email protected].
>>> For more options, visit this group at 
>>> http://groups.google.com/group/google-guice?hl=en.
>>> 
>>> 
>>> 
>>> 
>>> 
>>> -- 
>>> Eduardo S. Nunes
>>> http://enunes.org
>>> 
>>> --
>>> 
>>> You received this message because you are subscribed to the Google Groups 
>>> "google-guice" group.
>>> To post to this group, send email to [email protected].
>>> To unsubscribe from this group, send email to 
>>> [email protected].
>>> For more options, visit this group at 
>>> http://groups.google.com/group/google-guice?hl=en.
>> 
>> 
>> --
>> 
>> You received this message because you are subscribed to the Google Groups 
>> "google-guice" group.
>> To post to this group, send email to [email protected].
>> To unsubscribe from this group, send email to 
>> [email protected].
>> For more options, visit this group at 
>> http://groups.google.com/group/google-guice?hl=en.
>> 
>> 
>> 
>> -- 
>> Eduardo S. Nunes
>> http://enunes.org
>> 
>> --
>> 
>> You received this message because you are subscribed to the Google Groups 
>> "google-guice" group.
>> To post to this group, send email to [email protected].
>> To unsubscribe from this group, send email to 
>> [email protected].
>> For more options, visit this group at 
>> http://groups.google.com/group/google-guice?hl=en.
> 
> 
> --
> 
> You received this message because you are subscribed to the Google Groups 
> "google-guice" group.
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to 
> [email protected].
> For more options, visit this group at 
> http://groups.google.com/group/google-guice?hl=en.
> 
> 
> 
> -- 
> Eduardo S. Nunes
> http://enunes.org
> 
> --
> 
> You received this message because you are subscribed to the Google Groups 
> "google-guice" group.
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to 
> [email protected].
> For more options, visit this group at 
> http://groups.google.com/group/google-guice?hl=en.

--

You received this message because you are subscribed to the Google Groups 
"google-guice" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/google-guice?hl=en.


Reply via email to