look here for example: http://svn.codehaus.org/chenillekit/trunk/chenillekit-access/src/main/java/org/chenillekit/access/services/impl/RestrictedWorker.java
with regards Sven Homburg Founder of the Chenille Kit Project http://chenillekit.codehaus.org 2010/8/11 mfz2008 <fanzhen.m...@gmail.com>: > > hey,I using annotation to do permission checking in t5. > the following is what I have done!! > In page class: > > > @ProtectedPage({ "admin","editor","fmanager"}) > public class LibraryEdit extends BasePage { > > //submit the form, it is a event handle method > �...@protectedmethod(value={"admin"}) > Object onSuccessFromEdit() { > mmsLibraryService.save(_library); > return this; > } > } > > > > @ProtectedPage and @ProtectedMethod are both my annotation which are used in > my PageProtectionFilter class, and what is in my PageProtectionFilter : > > > > public class PageProtectionFilter implements ComponentRequestFilter { > > private final PageRenderLinkSource _pageRenderLinkSource; > private final ComponentSource _componentSource; > private final Response _response; > private ApplicationStateManager _sessionStateManager; > private SecurityFinderService _securityService; > private final Logger _logger; > > /** > * Receive all the services needed as constructor arguments. When we > bind > this service, T5 IoC will provide all the > * services! > */ > public PageProtectionFilter(PageRenderLinkSource pageRenderLinkSource, > ComponentSource componentSource, > Response response, ApplicationStateManager asm,@Inject > SecurityFinderService securityService,Logger logger) { > _pageRenderLinkSource = pageRenderLinkSource; > _response = response; > _componentSource = componentSource; > _sessionStateManager = asm; > _securityService = securityService; > _logger = logger; > } > > //page filter > public void handlePageRender(PageRenderRequestParameters parameters, > ComponentRequestHandler handler) > throws IOException { > if (isAuthorisedToPage(parameters.getLogicalPageName())) { > handler.handlePageRender(parameters); > } > else { > // The method will have redirected us to the login page > return; > } > > } > > //component filter > public void handleComponentEvent(ComponentEventRequestParameters > parameters, ComponentRequestHandler handler) > throws IOException { > > String eventType = parameters.getEventType(); > String nci = parameters.getNestedComponentId(); > > if > (isAuthorisedToComponent(parameters.getActivePageName(),eventType,nci)) > { > handler.handleComponentEvent(parameters); > } > else { > return; > } > } > > // for page .........annotation work well in this method > > public boolean isAuthorisedToPage(String requestedPageName) throws > IOException { > > // If the requested page is annotated @ProtectedPage... > Component page = _componentSource.getPage(requestedPageName); > boolean protectedPage = > page.getClass().getAnnotation(ProtectedPage.class) > != null; > > if (protectedPage) { > > // If the session contains a Visit then you have > already been > authenticated > > if (_sessionStateManager.exists(Visit.class)) { > // We could do some role checking where but we > won't. You're authorised. > Visit visit = > _sessionStateManager.get(Visit.class); > String roles[] = > page.getClass().getAnnotation(ProtectedPage.class).value(); > if(ArrayUtils.contains(roles, > visit.getMyRole())) > return true; > else{ > Link accessDeniedPageLink = > _pageRenderLinkSource.createPageRenderLink(AccessDenied.class); > > _response.sendRedirect(accessDeniedPageLink); > return false; > } > } > > // Else if "auto-login" is on, then automatically log > in. > // - this facility is for development environment > only. It avoids getting > you thrown out of the > // app every time the session clears eg. when app is > restarted. > > else if (isAutoLoginOn()) { > autoLogin(1L); > return true; > } > > // Else go to the Login page > > else { > Link loginPageLink = > _pageRenderLinkSource.createPageRenderLink(Index.class); > _response.sendRedirect(loginPageLink); > return false; > } > } > else { > return true; > } > } > > //and could not work well here ..... > > public boolean isAuthorisedToComponent(String requestedPageName,String > eventType,String nci) throws IOException { > > Component component = > _componentSource.getComponent(requestedPageName+":"+nci); > boolean isProtectedMethod = false; > String protectedMethod = ""; > Method[] methods = component.getClass().getMethods(); > for (Method method : methods) { > String str = method.getName().toLowerCase(); > if(str.endsWith(nci)){ > isProtectedMethod = > method.getAnnotation(ProtectedMethod.class) != null; > protectedMethod = method.getName(); > break; > } > } > if (isProtectedMethod) { > // If the session contains a Visit then you have > already been > authenticated > if (_sessionStateManager.exists(Visit.class)) { > Visit visit = > _sessionStateManager.get(Visit.class); > String roles[] = null; > try { > roles = > component.getClass().getMethod(protectedMethod, > null).getAnnotation(ProtectedMethod.class).value(); > } catch (Exception e) { > e.printStackTrace(); > } > if(ArrayUtils.contains(roles, > visit.getMyRole())) > return true; > else{ > Link accessDeniedPageLink = > _pageRenderLinkSource.createPageRenderLink(AccessDenied.class); > > _response.sendRedirect(accessDeniedPageLink); > return false; > } > } > > // Else if "auto-login" is on, then automatically log > in. > // - this facility is for development environment > only. It avoids getting > you thrown out of the > // app every time the session clears eg. when app is > restarted. > > else if (isAutoLoginOn()) { > autoLogin(1L); > return true; > } > > // Else go to the Login page > > else { > Link loginPageLink = > _pageRenderLinkSource.createPageRenderLink(Index.class); > _response.sendRedirect(loginPageLink); > return false; > } > > } > else { > return true; > } > } > /** > * Checks the value of system property jumpstart.auto-login. If "true" > then > returns true; if "false" then return > * false; if not set then returns false. > */ > private boolean isAutoLoginOn() { > boolean autoLogin = false; > if (_autoLoginStr == null) { > autoLogin = false; > } > else if (_autoLoginStr.equalsIgnoreCase("true")) { > autoLogin = true; > } > else if (_autoLoginStr.equalsIgnoreCase("false")) { > autoLogin = false; > } > else { > throw new IllegalStateException( > "System property auto-login has been > set to \"" > + _autoLoginStr > + "\". Please set it > to \"true\" or \"false\". If not specified at > all then it will default to \"false\"."); > } > return autoLogin; > } > > /** > * Automatically logs you in as the given user. Its intention is to > prevent > you being thrown out of the application > */ > private void autoLogin(Long userId) { > try { > User user = _securityService.findUser(userId); > > Visit visit = new Visit(); > visit.noteLogin(user); > > _logger.info(user.getLoginId() + " has been > auto-logged-in."); > > _sessionStateManager.set(Visit.class, visit); > } > catch (Exception e) { > throw new IllegalStateException(e); > } > } > } > > > > my problem is I could not get the annotation which I set on the t5 event > method. > actually, when I invoke : > ...................... > Component component = > _componentSource.getComponent(requestedPageName+":"+nci); > boolean isProtectedMethod = false; > String protectedMethod = ""; > Method[] methods = component.getClass().getMethods(); > for (Method method : methods) { > String str = method.getName().toLowerCase(); > if(str.endsWith(nci)){ > isProtectedMethod = > method.getAnnotation(ProtectedMethod.class) != null; > protectedMethod = method.getName(); > break; > } > } > ............... > the event method onSuccessFromEdit was not found methods array!!! > any helps are appreciated!!! > -- > View this message in context: > http://tapestry.1045711.n5.nabble.com/annotation-on-t5-event-method-couldn-t-work-tp2471453p2471453.html > Sent from the Tapestry - User mailing list archive at Nabble.com. >