19
19
import com .netflix .zuul .filters .FilterRegistry ;
20
20
import com .netflix .zuul .filters .FilterType ;
21
21
import com .netflix .zuul .filters .ZuulFilter ;
22
- import java .io .File ;
23
- import java .lang .reflect .Modifier ;
24
22
import java .util .ArrayList ;
25
23
import java .util .Collections ;
26
24
import java .util .List ;
@@ -38,100 +36,27 @@ public final class DynamicFilterLoader implements FilterLoader {
38
36
private static final Logger LOG = LoggerFactory .getLogger (DynamicFilterLoader .class );
39
37
40
38
private final ConcurrentMap <String , Long > filterClassLastModified = new ConcurrentHashMap <>();
41
- private final ConcurrentMap <String , String > filterClassCode = new ConcurrentHashMap <>();
42
- private final ConcurrentMap <String , String > filterCheck = new ConcurrentHashMap <>();
43
39
private final ConcurrentMap <FilterType , SortedSet <ZuulFilter <?, ?>>> hashFiltersByType = new ConcurrentHashMap <>();
44
40
private final ConcurrentMap <String , ZuulFilter <?, ?>> filtersByNameAndType = new ConcurrentHashMap <>();
45
41
46
42
private final FilterRegistry filterRegistry ;
47
43
48
- private final DynamicCodeCompiler compiler ;
49
-
50
44
private final FilterFactory filterFactory ;
51
45
52
46
@ Inject
53
47
public DynamicFilterLoader (
54
- FilterRegistry filterRegistry , DynamicCodeCompiler compiler , FilterFactory filterFactory ) {
48
+ FilterRegistry filterRegistry , FilterFactory filterFactory ) {
55
49
this .filterRegistry = filterRegistry ;
56
- this .compiler = compiler ;
57
50
this .filterFactory = filterFactory ;
58
51
}
59
52
60
- /**
61
- * Given source and name will compile and store the filter if it detects that the filter code
62
- * has changed or the filter doesn't exist. Otherwise it will return an instance of the
63
- * requested ZuulFilter.
64
- *
65
- * @deprecated it is unclear to me why this method is needed. Nothing seems to use it, and the
66
- * swapping of code seems to happen elsewhere. This will be removed in a later
67
- * Zuul release.
68
- */
69
- @ Deprecated
70
- public ZuulFilter <?, ?> getFilter (String sourceCode , String filterName ) throws Exception {
71
- if (filterCheck .get (filterName ) == null ) {
72
- filterCheck .putIfAbsent (filterName , filterName );
73
- if (!sourceCode .equals (filterClassCode .get (filterName ))) {
74
- if (filterRegistry .isMutable ()) {
75
- LOG .info ("reloading code {}" , filterName );
76
- filterRegistry .remove (filterName );
77
- } else {
78
- LOG .warn ("Filter registry is not mutable, discarding {}" , filterName );
79
- }
80
- }
81
- }
82
- ZuulFilter <?, ?> filter = filterRegistry .get (filterName );
83
- if (filter == null ) {
84
- Class <?> clazz = compiler .compile (sourceCode , filterName );
85
- if (!Modifier .isAbstract (clazz .getModifiers ())) {
86
- filter = filterFactory .newInstance (clazz );
87
- }
88
- }
89
- return filter ;
90
- }
91
-
92
53
/**
93
54
* @return the total number of Zuul filters
94
55
*/
95
56
public int filterInstanceMapSize () {
96
57
return filterRegistry .size ();
97
58
}
98
59
99
- /**
100
- * From a file this will read the ZuulFilter source code, compile it, and add it to the list of current filters
101
- * a true response means that it was successful.
102
- *
103
- * @param file the file to load
104
- * @return true if the filter in file successfully read, compiled, verified and added to Zuul
105
- */
106
- @ Override
107
- public boolean putFilter (File file ) {
108
- if (!filterRegistry .isMutable ()) {
109
- return false ;
110
- }
111
- try {
112
- String sName = file .getAbsolutePath ();
113
- if (filterClassLastModified .get (sName ) != null
114
- && (file .lastModified () != filterClassLastModified .get (sName ))) {
115
- LOG .debug ("reloading filter {}" , sName );
116
- filterRegistry .remove (sName );
117
- }
118
- ZuulFilter <?, ?> filter = filterRegistry .get (sName );
119
- if (filter == null ) {
120
- Class <?> clazz = compiler .compile (file );
121
- if (!Modifier .isAbstract (clazz .getModifiers ())) {
122
- filter = filterFactory .newInstance (clazz );
123
- putFilter (sName , filter , file .lastModified ());
124
- return true ;
125
- }
126
- }
127
- } catch (Exception e ) {
128
- LOG .error ("Error loading filter! Continuing. file={}" , file , e );
129
- return false ;
130
- }
131
-
132
- return false ;
133
- }
134
-
135
60
private void putFilter (String filterName , ZuulFilter <?, ?> filter , long lastModified ) {
136
61
if (!filterRegistry .isMutable ()) {
137
62
LOG .warn ("Filter registry is not mutable, discarding {}" , filterName );
0 commit comments