1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 package net.sf.jguard.core;
29
30 import net.sf.jguard.core.filters.Filterable;
31 import net.sf.jguard.core.filters.FilterChainImpl;
32 import net.sf.jguard.core.filters.Filter;
33 import java.util.ArrayList;
34 import java.util.List;
35 import java.util.Map;
36
37
38
39 import net.sf.jguard.core.authentication.AccessContext;
40 import net.sf.jguard.core.authentication.manager.AuthenticationManager;
41 import net.sf.jguard.core.authentication.manager.AuthenticationManagerFactory;
42 import net.sf.jguard.core.filters.PolicyEnforcementPointFilter;
43 import org.slf4j.Logger;
44 import org.slf4j.LoggerFactory;
45
46
47
48
49
50
51
52 public class PolicyEnforcementPoint implements Cloneable{
53
54 private static final Logger logger = LoggerFactory.getLogger(PolicyEnforcementPoint.class.getName());
55
56 private List<Filter> filters;
57
58 private PolicyEnforcementPoint(){
59
60 }
61
62 public PolicyEnforcementPoint(String authenticationBindingsFactoryImpl,Map<PolicyEnforcementPointOptions,String> options){
63
64 PolicyEnforcementPointFilter pepFilter = new PolicyEnforcementPointFilter(authenticationBindingsFactoryImpl,options);
65 filters = new ArrayList<Filter>();
66 AuthenticationManager authenticationManager = AuthenticationManagerFactory.getAuthenticationManager();
67 if(authenticationManager!=null && authenticationManager instanceof Filterable){
68 logger.debug("adding authenticationManager filter");
69 addFilter(((Filterable)authenticationManager).getFilter());
70 }
71 addFilter(pepFilter);
72 }
73
74
75
76
77
78
79 public void process(AccessContext context){
80 try{
81 FilterChainImpl filterChain = new FilterChainImpl(filters);
82 filterChain.doFilter(context);
83 }catch(Throwable t){
84 logger.error(t.getMessage(),t);
85 throw new IllegalStateException(" an exception has occured ");
86 }
87
88 }
89
90 public void addFilter(Filter filter){
91 filters.add(filter);
92 }
93
94 public void addFilter(int index,Filter filter){
95 filters.add(index,filter);
96 }
97
98 public Object clone(){
99 PolicyEnforcementPoint p = new PolicyEnforcementPoint();
100 p.filters = new ArrayList<Filter>(filters);
101 return p;
102 }
103 }