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
29
30
31
32
33
34 package fr.paris.lutece.portal.service.filter;
35
36 import fr.paris.lutece.portal.service.init.LuteceInitException;
37 import fr.paris.lutece.portal.service.plugin.Plugin;
38 import fr.paris.lutece.portal.service.util.AppLogService;
39
40 import java.util.ArrayList;
41 import java.util.Collections;
42 import java.util.List;
43
44 import javax.servlet.Filter;
45 import javax.servlet.ServletContext;
46
47
48
49
50
51 public final class FilterService
52 {
53 private static FilterService _singleton = new FilterService( );
54 private static ServletContext _context;
55 private List<LuteceFilter> _listFilters = new ArrayList<LuteceFilter>( );
56
57
58
59
60 private FilterService( )
61 {
62 }
63
64
65
66
67
68 public static FilterService getInstance( )
69 {
70 return _singleton;
71 }
72
73
74
75
76
77
78 public void registerFilter( FilterEntry entry, Plugin plugin )
79 {
80 try
81 {
82 Filter filter = (Filter) Class.forName( entry.getFilterClass( ) ).newInstance( );
83 LuteceFilter f = new LuteceFilter( entry.getName( ), filter, entry.getMappingUrlPattern( ), plugin,
84 entry.getInitParameters( ) );
85 f.setOrder( entry.getOrder( ) );
86 _listFilters.add( f );
87 AppLogService.info( "New Filter registered : " + entry.getName( ) );
88
89 for ( String strKey : entry.getInitParameters( ).keySet( ) )
90 {
91 AppLogService.info( " * init parameter - name : '" + strKey + "' - value : '" +
92 entry.getInitParameters( ).get( strKey ) + "'" );
93 }
94 }
95 catch ( InstantiationException e )
96 {
97 AppLogService.error( "Error registering a filter : " + e.getMessage( ), e );
98 }
99 catch ( IllegalAccessException e )
100 {
101 AppLogService.error( "Error registering a filter : " + e.getMessage( ), e );
102 }
103 catch ( ClassNotFoundException e )
104 {
105 AppLogService.error( "Error registering a filter : " + e.getMessage( ), e );
106 }
107 }
108
109
110
111
112
113 public static void setServletContext( ServletContext servletContext )
114 {
115 _context = servletContext;
116 }
117
118
119
120
121
122
123 public static void init( ServletContext context ) throws LuteceInitException
124 {
125 _context = context;
126 AppLogService.info( "Initialize plugins filters" );
127
128 for ( LuteceFilter filter : FilterService.getInstance( ).getFilters( ) )
129 {
130
131 try
132 {
133 if ( filter.getPlugin( ).isInstalled( ) )
134 {
135
136 LuteceFilterConfig filterConfig = new LuteceFilterConfig( filter.getName( ), _context,
137 filter.getInitParameters( ) );
138 filter.getFilter( ).init( filterConfig );
139 AppLogService.info( " * filter '" + filter.getName( ) + "' from plugin " +
140 filter.getPlugin( ).getName( ) + " initialized." );
141 }
142 }
143 catch ( Exception e )
144 {
145 AppLogService.error( "Error execution init() method - Filter " + filter.getName( ), e );
146 throw new LuteceInitException( "Error execution init() method - Filter " + filter.getName( ), e );
147 }
148 }
149
150 sortFilters( );
151
152 if ( AppLogService.isDebugEnabled( ) )
153 {
154 AppLogService.debug( "Displaying filters order" );
155
156 for ( LuteceFilter filter : FilterService.getInstance( ).getFilters( ) )
157 {
158 AppLogService.debug( filter.getName( ) + " - order = " + filter.getOrder( ) );
159 }
160 }
161 }
162
163
164
165
166 public static void sortFilters( )
167 {
168
169 Collections.sort( FilterService.getInstance( ).getFilters( ) );
170 }
171
172
173
174
175
176 public List<LuteceFilter> getFilters( )
177 {
178 return _listFilters;
179 }
180 }