Hi, thank you for your examples and links. I think this is exactly the way I will resolve the problem.
Best regards, Rudi On 5/16/07, Bernd Bohmann <[EMAIL PROTECTED]> wrote:
Hello Rudi, take a look at http://svn.apache.org/repos/asf/myfaces/tobago/trunk/contrib/security/ This example use a different ApplicationFactory that returns a MethodBindingImpl that check the role of the user. The security package is used in the http://svn.apache.org/repos/asf/myfaces/tobago/trunk/example/addressbook Regards Bernd Rudi Steiner wrote: > Hi Petr, hi Martin, > > I think the right way is to register an action-listener in the > faces-config and to determine in the method processAction(ActionEvent > event), if the current user has the role to execute this action. > > Has anyone an idea, how to implement the role-check, maybe with > annotations on the method which is going to be called? How can I find > out from the event-param, which method in the backingbean is going to > be called by this action? > > thanks a lot, > Rudi > > > On 5/15/07, Martin Marinschek <[EMAIL PROTECTED]> wrote: >> You wouldn't register a phase-listener, you'd rather decorate the >> action-listener to find a solution to this. >> >> faces-config.xml: >> <application> >> <action-listener>your decorator goes here</action-listener> >> </applicaton> >> >> ... the default-action listener calls all actions! >> >> regards, >> >> Martin >> >> On 5/15/07, Petr Kotek <[EMAIL PROTECTED]> wrote: >> > Hi Rudi, >> > >> > I am only begginer in JSF and I don't now if exisist better way to >> > handle login but next code may help You. >> > >> > PhaseListener >> > ------------------------------------------- >> > public class LoginPhaseListener implements PhaseListener { >> > private final String LOGIN_SOURCE = "loginButton"; >> > private final String METHOD_GET = "GET"; >> > private final String MAIN_PAGE = "main.jsp"; >> > private final String LOGIN_PAGE = "index.jsp"; >> > >> > public LoginPhaseListener() { >> > } >> > >> > public PhaseId getPhaseId() { >> > return PhaseId.RESTORE_VIEW; >> > } >> > >> > public void beforePhase(PhaseEvent phaseEvent) { >> > } >> > >> > public void afterPhase(PhaseEvent phaseEvent) { >> > FacesContext ctx; >> > ExternalContext ex; >> > JSFSession session; >> > HttpServletRequest hsrq; >> > String login; >> > String password; >> > HttpServletResponse hrsp; >> > >> > ctx = phaseEvent.getFacesContext(); >> > session = >> > >> (JSFSession)ctx.getApplication().createValueBinding("#{JSFSession}").getValue(ctx); >> >> > if (!session.isLogged()) { >> > ex = ctx.getExternalContext(); >> > try { >> > hsrq = (HttpServletRequest)ex.getRequest(); >> > // If source is loginButton, then try doLogin >> > if >> (LOGIN_SOURCE.equalsIgnoreCase(hsrq.getParameter("source"))) { >> > // Get ifo from login page >> > login = hsrq.getParameter("login"); >> > password = hsrq.getParameter("password"); >> > // Check it >> > if ((login == null) || (password == null) || (login.length() >> > == 0) || (password.length() == 0)) { >> > ctx.addMessage(null, new >> > FacesMessage(FacesMessage.SEVERITY_ERROR, "Login or Password can't be >> > empty!", null)); >> > } else if (session.doLogin(login, password)) { >> > if (METHOD_GET.equalsIgnoreCase(hsrq.getMethod())) { >> > // Special login (for debug app - autologin) from request >> > parameters (?source=loginButton&login=name&password=psw) - redirect to >> > main.jsp >> > ex.redirect(MAIN_PAGE); >> > } >> > } else { >> > ctx.addMessage(null, new >> > FacesMessage(FacesMessage.SEVERITY_ERROR, "Bad Login or Password!", >> null)); >> > } >> > } else if (hsrq.getRequestURI().indexOf(LOGIN_PAGE) < 0) { >> > ctx.addMessage(null, new >> > FacesMessage(FacesMessage.SEVERITY_ERROR, "Session Logged Out or >> > Expired!", null)); >> > ex.redirect(LOGIN_PAGE); >> > } >> > } catch (Exception e) { >> > e.printStackTrace(); >> > ctx.addMessage(null, new >> > FacesMessage(FacesMessage.SEVERITY_ERROR, "Unexpected login error!", >> > e.getMessage())); >> > try { >> > ex.redirect(LOGIN_PAGE); >> > } catch (IOException f) {;} >> > } >> > } >> > } >> > } >> > ------------------------------------------- >> > Navigation Handler >> > ------------------------------------------- >> > public class LoginNavigationHandler extends NavigationHandler { >> > private final NavigationHandler deflNavHandler; // Original handler >> > >> > public LoginNavigationHandler(NavigationHandler navHandler) { >> > super(); >> > deflNavHandler = navHandler; >> > } >> > >> > public void handleNavigation(FacesContext facesContext, String >> > fromAction, String outcome) { >> > JSFSession session; >> > try { >> > session = >> > >> (JSFSession)facesContext.getApplication().createValueBinding("#{JSFSession}").getValue(facesContext); >> >> > if (!session.isLogged()) { >> > outcome = "logout"; >> > } >> > } catch (Exception ex) { >> > ex.printStackTrace(); >> > } finally { >> > deflNavHandler.handleNavigation(facesContext, fromAction, >> outcome); >> > } >> > } >> > } >> > ------------------------------------------- >> > >> > >> > Where JSFSession is session bean with boolean .isLogged() and boolean >> > .doLogin(login, password) methods. Actually I checked login/password >> > against database table with valid users. >> > >> > Petr >> > >> > >> > >> > Rudi Steiner wrote: >> > > Hi Veit, >> > > >> > > I don't use spring, so I can't use this mechanism :( >> > > >> > > Is there a possibility to get the action to call over the >> facesContext? >> > > >> > > thanks, >> > > Rudi >> > > >> > > On 5/15/07, Walter Oliver (BR/ICI3) <[EMAIL PROTECTED]> >> > > wrote: >> > >> Frau Nolte wird heute abend 16:30 erste Testbestellungen absenden. >> > >> >> > >> Kunden können ebenso bereits bestellen. >> > >> >> > >> Gruss Oliver Walter >> > >> >> > >> > -----Ursprüngliche Nachricht----- >> > >> > Von: Veit Guna [mailto:[EMAIL PROTECTED] >> > >> > Gesendet: Dienstag, 15. Mai 2007 12:11 >> > >> > An: MyFaces Discussion >> > >> > Betreff: Re: MyFaces and Security >> > >> > >> > >> > I didn't follow the whole thread, but isn't acegi (if you use >> > >> > spring) a solution? I use it to protect specific url's as >> > >> > well es method invocations on backing beans. Works fine for >> > >> > me (but I'm using spring). I must also admit, that I'm using >> > >> > jsf-spring to let spring create the backing beans for me (and >> > >> > thus let acegi take over security). >> > >> > >> > >> > /Veit >> > >> > >> > >> > >> > >> > -------- Original-Nachricht -------- >> > >> > Datum: Tue, 15 May 2007 12:03:21 +0200 >> > >> > Von: "Rudi Steiner" <[EMAIL PROTECTED]> >> > >> > An: "MyFaces Discussion" <[email protected]> >> > >> > Betreff: Re: MyFaces and Security >> > >> > >> > >> > > Hi Cagatay, >> > >> > > >> > >> > > thanks for the hint. This is definitely one step in making >> > >> > an jsf-app >> > >> > > secure. >> > >> > > >> > >> > > I would like to increase the security of my app by writing a >> > >> > > phaselistener, which checks the action the current request >> > >> > is calling >> > >> > > and makes sure, that the current user has the right to call this >> > >> > > action (example calling the method deleteUser() in a >> backingbean). >> > >> > > >> > >> > > Could anyone please tell me, how I can determine in a >> phaselistener >> > >> > > which action is going to be called in the current request? >> > >> > > >> > >> > > best regards, >> > >> > > Rudi >> > >> > > >> > >> > > On 5/14/07, Cagatay Civici <[EMAIL PROTECTED]> wrote: >> > >> > > > Hi, >> > >> > > > >> > >> > > > Regarding your concerns about the viewstate at client; >> > >> > > > >> > >> > > > http://wiki.apache.org/myfaces/Secure_Your_Application >> > >> > > > >> > >> > > > Cagatay >> > >> > > > >> > >> > > > >> > >> > > > On 5/14/07, Rudi Steiner <[EMAIL PROTECTED]> wrote: >> > >> > > > > Hello, >> > >> > > > > >> > >> > > > > I'm in the final state of a project and thinking about, >> > >> > which is the >> > >> > > > > best way to make a myFaces-App secure (authentication, >> > >> > authorization, >> > >> > > > > ...) >> > >> > > > > >> > >> > > > > I'm thinking about the Tomcat build in mechanism or an >> > >> > alternative >> > >> > > > > like securityFilter. But thinking about it, I got some >> > >> > questions like, >> > >> > > > > how about to fake the view state on the client side. >> > >> > > > > >> > >> > > > > Could It be, that for example a normal user who knows the >> > >> > > > > applicationcode, fakes the viewstate on the client for >> > >> > a page which >> > >> > > > > has for example some commandbuttons which are rendered >> > >> > for an admin >> > >> > > > > but are not rendered for a normal user? Has anyone made >> > >> > experiences in >> > >> > > > > this area? >> > >> > > > > >> > >> > > > > thanks a lot, >> > >> > > > > Rudi >> > >> > > > > >> > >> > > > >> > >> > > > >> > >> > >> > >> > -- >> > >> > GMX FreeMail: 1 GB Postfach, 5 E-Mail-Adressen, 10 Free SMS. >> > >> > Alle Infos und kostenlose Anmeldung: >> http://www.gmx.net/de/go/freemail >> > >> > >> > >> >> > > >> > >> >> >> -- >> >> http://www.irian.at >> >> Your JSF powerhouse - >> JSF Consulting, Development and >> Courses in English and German >> >> Professional Support for Apache MyFaces >> >

