Excellent explanation, Erik. Consider adding this to the Struts Wiki for posterity? Must be a place for it in there somewhere ...
Erik Weber <[EMAIL PROTECTED]> wrote on 08/19/2004 08:31:08 AM: > Sorry, by "hand-rolled" I just mean one that is written specifically for > the application (written by you). > > The general idea is something like this: > > Make a BaseAction class. > > Implement a checkLogin method in the BaseAction class that looks in the > current request's HttpSession for a "User" object, which you would have > placed into the session in your LoginAction. > Implement a checkPermission method in the BaseAction class that looks in > the current HttpSession for a role associated with the user (maybe this > is part of the "User" object) that matches the role required for the > current request (or you can go as fine-grained as you want, with many > different permissions to check for a single request) to be granted. > > All your Action classes extend the BaseAction class. They can invoke the > checkLogin and/or the checkPermission methods at the beginning of the > execute method to decide whether/how to proceed. > > Write a LoginAction class that sets the "User" action, along with > permissions, roles, etc., whatever else is needed in your checkLogin and > checkPermission methods, in the session after login has succeeded (you > have taken the entered username and password and matched them > successfully against a username and password combination in your > database -- typically in a USERS table). > > Write a Logout Action that invalidates the current session. > > Alternatively, you could check the login and the permissions the same > way, but in a sublass of the Struts RequestProcessor, or in a Servlet > Filter, instead of in a BaseAction class. > > If you want to go with container-managed security and you can use > Tomcat, try this (you should probably read it anyway). > > http://jakarta.apache.org/tomcat/tomcat-5.0-doc/realm-howto.html > > I also suggest you read the security section of the J2EE tutorial, and > the security sections of the JSP and Servlet specifications. > > If you go with container-managed security, it's real easy to allow/deny > entire JSPs, but you still may need to implement finer-grained > permissions checks on your own if you need to, for example, show/hide > links on a page based on permissions. > > Erik > > Leandro Melo wrote: > > >Erik, > >i don't quite understand what you call a hand-rolled > >java component (maybe because of my english). > >Anyway, it seems to me that you're not using JAAS to > >completely control application's security, are u? > >I don't know if it possible, but if so, would you post > >your setup and basic classes? > >I'm very very new at security stuff... > >Anyway, i cleared out a lot of things for me. > > > >Thanks, > >Leandro. > > > > > > --- Erik Weber <[EMAIL PROTECTED]> escreveu: > > > > > >>I don't really consider myself an expert here, but I > >>dare say that there > >>are a lot of webapps deployed out there using > >>programmatic (hand-rolled) > >>security successfully. I have used the approach with > >>success. What > >>exactly the advantages are to using > >>container-managed security I am not > >>able to fully deduce (except for the obvious -- it's > >>nice to declare > >>stuff in web.xml in a standardized way -- and that > >>perhaps it might make > >>Servlets a *little* more portable if you wanted to > >>use them among > >>different apps). But then again, I haven't had to > >>take on a project yet > >>where the environment was extremely complicated, > >>when it came to how > >>users and permissions were managed (typically I see > >>the same tried and > >>trusted setup -- USER, GROUP, ROLES and PERMISSIONS > >>tables in some > >>central database, and some hand-rolled Java > >>component, used to authorize > >>the current request, that is invoked in some > >>"common" area, such as a > >>Servlet Filter -- or, in Struts, a base Action class > >>or a custom > >>RequestProcessor). It seems like JAAS is still at an > >>immature stage > >>perhaps, or at least the state of documenation about > >>it is. > >> > >>The other route it seems you could go is to use a > >>container-managed > >>login as you suggest, and enjoy using the methods > >>such as > >>request.isUserInRole instead of invoking security > >>methods on a > >>hand-rolled component, but I think you will have to > >>give up the > >>JBoss/Tomcat stack to do this for now (someone > >>please correct me if I am > >>wrong), because I think there is a security > >>integration problem there, > >>as I described earlier. I'm guessing Tomcat as stand > >>alone might be a > >>good way to go though. I have not done this and > >>couldn't say whether it > >>is "common and usual". > >> > >>I have tried to write my role-checking methods so > >>that in the future if > >>I port an application to JAAS I can just refactor > >>them to invoke the > >>standard methods instead of my own. But like I say, > >>I'm far from an > >>expert in this area. > >> > >>Hope that helps, > >> > >>Erik > >> > >>Leandro Melo wrote: > >> > >> > >> > >>>So Erik, is it a common and usual aproach to do > >>> > >>> > >>login > >> > >> > >>>outside of Struts (ordinary jsps), and then use > >>> > >>> > >>Struts > >> > >> > >>>afterwards??? > >>> > >>> > >>>--- Erik Weber <[EMAIL PROTECTED]> > >>> > >>> > >>escreveu: > >> > >> > >>> > >>> > >>> > >>> > >>>>Leandro, search the archives of this List for > >>>>"JAAS". I participated in > >>>>a thread about this within the last two months. > >>>> > >>>>I'm not sure if I understand exactly what you want > >>>>to do, but if you > >>>>want to use container-managed security, I don't > >>>> > >>>> > >>know > >> > >> > >>>>of a way to have > >>>>your login screen be part of Struts. As far as I > >>>>know, you have to let > >>>>the container process the request that results > >>>> > >>>> > >>from > >> > >> > >>>>the login screen's > >>>>form submittal (I tried having an Action intercept > >>>>this request and then > >>>>attempt to login with the JBoss JAAS module > >>>> > >>>> > >>manually > >> > >> > >>>>but gave up when I > >>>>realized problem # 2 -- below). > >>>> > >>>>Another problem you are probably going to run into > >>>>is that the JBoss > >>>>security context is not propagated to Tomcat, and > >>>>vice versa, as far as > >>>>I know. So if you authenticate using JBoss JAAS, > >>>>Tomcat won't know about > >>>>it, and the methods such as request.isUserInRole > >>>>aren't going to do you > >>>>any good (although you would presumably be able to > >>>>use the similar > >>>>methods on EJBs, because they are running within > >>>> > >>>> > >>the > >> > >> > >>>>JBoss security > >>>>context). > >>>> > >>>>I found JAAS to be a nightmare, though a couple > >>>>people gave me possible > >>>>solutions to the problems I mentioned in the > >>>> > >>>> > >>thread > >> > >> > >>>>(one would be > >>>>intercepting the login screen request and then > >>>>manually logging in with > >>>>both JBoss JAAS as well as Tomcat JAAS modules -- > >>>>but I don't know if > >>>>this has been done). I presume it's a much easier > >>>>endeavor if you are > >>>>just using Tomcat stand alone, but I'll let Craig > >>>>address that if he > >>>>wants, because I've never tried it. > >>>> > >>>>Erik > >>>> > >>>> > >>>>Leandro Melo wrote: > >>>> > >>>> > >>>> > >>>> > >>>> > >>>>>Or i just extend the DatabaseServerLoginModule > >>>>> > >>>>> > >>>>> > >>>>> > >>>>class > >>>> > >>>> > >>>> > >>>> > >>>>>and leave an empty class???? > >>>>> > >>>>> > >>>>> > >>>>>--- Leandro Melo <[EMAIL PROTECTED]> > >>>>>escreveu: > >>>>> > >>>>> > >>>>> > >>>>> > >>>>> > >>>>> > >>>>>>Just complementing my question... > >>>>>> > >>>>>>Would it be fair if i copy JBoss' > >>>>>>DatabaseServerLoginModule code and place it > >>>>>> > >>>>>> > >>inside > >> > >> > >>>>>>an > >>>>>>Action??? > >>>>>> > >>>>>>This way, i'll have an Action (for example, > >>>>>>MyLoginAction) that does exactly what > >>>>>>DatabaseServerLoginModule does. > >>>>>> > >>>>>> > >>>>>> > >>>>>>--- Leandro Melo <[EMAIL PROTECTED]> > >>>>>>escreveu: > >>>>>> > >>>>>> > >>>>>> > >>>>>> > >>>>>> > >>>>>> > >>>>>>>Please help me out here! > >>>>>>>I'm very new with jaas, so i need some help. > >>>>>>> > >>>>>>>I got a simple login that is working fine for > >>>>>>> > >>>>>>> > >>me, > >> > >> > >>>>>>>here > >>>>>>>it is: > >>>>>>> > >>>>>>>... > >>>>>>><FORM action='<%= > >>>>>>>response.encodeURL("j_security_check")%>' > >>>>>>> method="get"> > >>>>>>> <!-- esses nomes tem q ser assim -> >>>>>>>j_username >>>>>>>--> > >>>>>>> NOME:<INPUT type="text" name="j_username" > >>>>>>> > >>>>>>> > >>>>>>> > >>>>>>> > >>>>>>> > >>>>>>> > >>>>>>/> > >>>>>> > >>>>>> > >>>>>> > >>>>>> > >>>>>> > >>>>>> > >>>>>>> > >>>>>>> <!-- tem q ser j_password --> > >>>>>>> SENHA: <INPUT type="password" > >>>>>>>name="j_password" > >>>>>>>/> > >>>>>>> <INPUT type="submit" value="Login" /> > >>>>>>> > >>>>>>> > >=== message truncated === > > > > > > > > > > > >_______________________________________________________ > >Yahoo! Acesso Grátis - navegue de graça com conexão de qualidade! > >http://br.acesso.yahoo.com/ > > > >--------------------------------------------------------------------- > >To unsubscribe, e-mail: [EMAIL PROTECTED] > >For additional commands, e-mail: [EMAIL PROTECTED] > > > > > > > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > > _____________________________________________________________________________ > Scanned for SoftLanding Systems, Inc. by IBM Email Security > Management Services powered by MessageLabs. > _____________________________________________________________________________ _____________________________________________________________________________ Scanned for SoftLanding Systems, Inc. by IBM Email Security Management Services powered by MessageLabs. _____________________________________________________________________________ --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]