@@ -133,11 +133,17 @@ public String encrypt(String str, Map<String, String> attr) throws SecDispatcher
133133
134134 @ Override
135135 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 ;
139138 if (isLegacyEncryptedString (str )) {
139+ bare = unDecorateLegacy (str );
140+ attr = new HashMap <>();
140141 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 ;
141147 }
142148 String name = attr .get (DISPATCHER_NAME_ATTR );
143149 Dispatcher dispatcher = dispatchers .get (name );
@@ -172,14 +178,20 @@ public boolean isEncryptedString(String str) {
172178 */
173179 @ Override
174180 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+ }
183195 }
184196 return false ;
185197 }
@@ -309,4 +321,10 @@ protected Map<String, String> stripAttributes(String str) {
309321 protected String unDecorate (String str ) {
310322 return str .substring (SHIELD_BEGIN .length (), str .length () - SHIELD_END .length ());
311323 }
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+ }
312330}
0 commit comments