4
我有有許多的常量類:使用的String.format()作爲註釋屬性值
public class SecurityConstants {
private static final String HAS_ROLE_TEMPLATE = "hasRole('%s')";
public static final String ROLE_USER_INTERNAL = "ROLE_USER_INTERNAL";
public static final String HAS_ROLE_USER_INTERNAL = String.format(HAS_ROLE_TEMPLATE, ROLE_USER_INTERNAL);
}
如果我再嘗試這樣@PreAuthorize(SecurityConstants.HAS_ROLE_USER_INTERNAL)
編譯器失敗,使用HAS_ROLE_USER_INTERNAL
爲@PreAuthorize
標註屬性值:
用於註釋屬性的值 PreAuthorize.value必須是常量表達式
但是如果我改變HAS_ROLE_USER_INTERNAL
是一個簡單的String
它工作得很好:
public static final String HAS_ROLE_USER_INTERNAL = "hasRole('ROLE_USER_INTERNAL')";
什麼用String.format()
問題?字段是static
和final
,可能會出現什麼問題?
是的,好吧,但是如果普通的'String'文字支持Java格式,那麼它會好很多。 'format(「hasRole('%s')」,ROLE_NAME)''看起來比'「hasRole(''+ ROLE_NAME +'')」'IMO好得多......或者我做了太多的python編程。 :-) – parxier 2011-05-19 04:40:19
我知道這是真的很晚,@parxier你有沒有考慮啓用'@ Secured'註釋('@EnableGlobalMethodSecurity(securedEnabled = true)')?那麼你可以做一些類似'@Secured({ROLE_NAME})'(角色名應該有一個明確的ROLE_前綴,例如'ROLE_NAME =「ROLE_ADMIN」;') – coderatchet 2017-06-15 01:46:15