@@ -133,11 +133,17 @@ public String encrypt(String str, Map<String, String> attr) throws SecDispatcher
133
133
134
134
@ Override
135
135
public String decrypt (String str ) throws SecDispatcherException , IOException {
136
- if (!isAnyEncryptedString (str )) return str ;
137
- String bare = unDecorate (str );
138
- Map <String , String > attr = requireNonNull (stripAttributes (bare ));
136
+ String bare ;
137
+ Map <String , String > attr ;
139
138
if (isLegacyEncryptedString (str )) {
139
+ bare = unDecorateLegacy (str );
140
+ attr = new HashMap <>();
140
141
attr .put (DISPATCHER_NAME_ATTR , LegacyDispatcher .NAME );
142
+ } else if (isEncryptedString (str )) {
143
+ bare = unDecorate (str );
144
+ attr = requireNonNull (stripAttributes (bare ));
145
+ } else {
146
+ return str ;
141
147
}
142
148
String name = attr .get (DISPATCHER_NAME_ATTR );
143
149
Dispatcher dispatcher = dispatchers .get (name );
@@ -172,14 +178,20 @@ public boolean isEncryptedString(String str) {
172
178
*/
173
179
@ Override
174
180
public boolean isLegacyEncryptedString (String str ) {
175
- boolean looksLike = str != null
176
- && !str .isBlank ()
177
- && str .startsWith (SHIELD_BEGIN )
178
- && str .endsWith (SHIELD_END )
179
- && !unDecorate (str ).contains (SHIELD_BEGIN )
180
- && !unDecorate (str ).contains (SHIELD_END );
181
- if (looksLike ) {
182
- return stripAttributes (unDecorate (str )).isEmpty ();
181
+ if (str != null && str .contains (SHIELD_BEGIN )) {
182
+ str = str .substring (str .indexOf (SHIELD_BEGIN ));
183
+ if (str .contains (SHIELD_END )) {
184
+ str = str .substring (0 , str .indexOf (SHIELD_END ) + 1 );
185
+ String undecorated = unDecorate (str );
186
+ boolean looksLike = !str .isBlank ()
187
+ && str .startsWith (SHIELD_BEGIN )
188
+ && str .endsWith (SHIELD_END )
189
+ && !undecorated .contains (SHIELD_BEGIN )
190
+ && !undecorated .contains (SHIELD_END );
191
+ if (looksLike ) {
192
+ return stripAttributes (undecorated ).isEmpty ();
193
+ }
194
+ }
183
195
}
184
196
return false ;
185
197
}
@@ -309,4 +321,10 @@ protected Map<String, String> stripAttributes(String str) {
309
321
protected String unDecorate (String str ) {
310
322
return str .substring (SHIELD_BEGIN .length (), str .length () - SHIELD_END .length ());
311
323
}
324
+
325
+ protected String unDecorateLegacy (String str ) {
326
+ str = str .substring (str .indexOf (SHIELD_BEGIN ));
327
+ str = str .substring (0 , str .indexOf (SHIELD_END ) + 1 );
328
+ return unDecorate (str );
329
+ }
312
330
}
0 commit comments