001 package org.tynamo.security.services.impl;
002
003 import org.apache.tapestry5.ioc.annotations.EagerLoad;
004 import org.apache.tapestry5.ioc.annotations.Inject;
005 import org.apache.tapestry5.ioc.annotations.Symbol;
006 import org.apache.tapestry5.ioc.services.PipelineBuilder;
007 import org.slf4j.Logger;
008 import org.tynamo.security.SecuritySymbols;
009 import org.tynamo.security.services.SecurityFilterChainFactory;
010 import org.tynamo.security.shiro.AccessControlFilter;
011 import org.tynamo.security.shiro.authc.AnonymousFilter;
012 import org.tynamo.security.shiro.authc.BasicHttpAuthenticationFilter;
013 import org.tynamo.security.shiro.authc.FormAuthenticationFilter;
014 import org.tynamo.security.shiro.authc.UserFilter;
015 import org.tynamo.security.shiro.authz.PermissionsAuthorizationFilter;
016 import org.tynamo.security.shiro.authz.RolesAuthorizationFilter;
017
018 // Eager load since this service is initializes the global filter defaults
019 @EagerLoad
020 public class SecurityFilterChainFactoryImpl implements SecurityFilterChainFactory {
021 private PipelineBuilder builder;
022
023 private Logger logger;
024
025 public SecurityFilterChainFactoryImpl(PipelineBuilder builder, Logger logger,
026 @Inject @Symbol(SecuritySymbols.SUCCESS_URL) String successUrl,
027 @Inject @Symbol(SecuritySymbols.LOGIN_URL) String loginUrl,
028 @Inject @Symbol(SecuritySymbols.UNAUTHORIZED_URL) String unauthorizedUrl
029 ) {
030 this.builder = builder;
031 this.logger = logger;
032 AccessControlFilter.LOGIN_URL = loginUrl;
033 AccessControlFilter.SUCCESS_URL = successUrl;
034 AccessControlFilter.UNAUTHORIZED_URL = unauthorizedUrl;
035 }
036
037 public SecurityFilterChain.Builder createChain(String path) {
038 return new SecurityFilterChain.Builder(logger, builder, path);
039 }
040
041 @SuppressWarnings("unchecked")
042 public String getLogicalUrl(Class pageClass) {
043 // TODO should add package, or maybe use Tapestry util operation for it?
044 return "/" + pageClass.getSimpleName().toLowerCase();
045 }
046
047 public AnonymousFilter anon() {
048 String name = "anon";
049 AnonymousFilter filter = new AnonymousFilter();
050 filter.setName(name);
051 return filter;
052 }
053
054 public UserFilter user() {
055 String name = "user";
056 UserFilter filter = new UserFilter();
057 filter.setName(name);
058 return filter;
059 }
060
061 public FormAuthenticationFilter authc() {
062 String name = "authc";
063 FormAuthenticationFilter filter = new FormAuthenticationFilter();
064 filter.setName(name);
065 return filter;
066 }
067
068 public BasicHttpAuthenticationFilter basic() {
069 String name = "authcBasic";
070 BasicHttpAuthenticationFilter filter = new BasicHttpAuthenticationFilter();
071 filter.setName(name);
072 return filter;
073 }
074
075 public RolesAuthorizationFilter roles() {
076 String name = "roles";
077 RolesAuthorizationFilter filter = new RolesAuthorizationFilter();
078 filter.setName(name);
079 return filter;
080 }
081
082
083 public PermissionsAuthorizationFilter perms() {
084 String name = "perms";
085 PermissionsAuthorizationFilter filter = new PermissionsAuthorizationFilter();
086 filter.setName(name);
087 return filter;
088 }
089
090
091
092 }