棣栧厛錛屾柊寤轟竴涓帴鍙o紝鍔犱笂 @ViewConfig 娉ㄨВ銆傚啀鍦ㄦ帴鍙d腑瀹氫箟涓灇涓撅紝閫氳繃瀵規(guī)灇涓鵑噷闈㈡瘡涓厓绱犳坊鍔犱竴浜涙敞瑙o紝鐩稿綋浜庡畾涔変簡涓浜涜闂鍒欍?br />
@ViewConfig
public interface Pages {
static enum page {
@FacesRedirect
@ViewPattern("/pages/*")
@LoggedIn
User,
@FacesRedirect
@ViewPattern("/*")
@LoginView("/Login1.xhtml")
@AccessDeniedView("/denied.xhtml")
ALL;
}
}
涓嬮潰瀵瑰悇涓敞瑙h繘琛岃В閲婏細(xì)
@ViewConfig
榪欎釜娉ㄨВ鍛婅瘔Seam妗嗘灦榪欎釜鎺ュ彛閲岄潰鏋氫婦鏄璁塊棶鏉冮檺榪涜緗?/span>
@ViewPattern
榪欎釜娉ㄨВ鐨勫弬鏁版槸瀵規(guī)嫤鎴殑鐩爣榪涜閰嶇疆錛屽彲浠ヤ嬌鐢ㄩ氶厤絎︺?/span>
@LoginView, @AccessDeniedView
榪欎袱涓敞瑙g殑鍙傛暟鍒嗗埆鏄櫥褰曞拰鐧誨綍澶辮觸鐨勮煩杞〉闈€?/span>
@Admin
榪欏叾瀹炴槸鑷畾涔夋敞瑙o紝閫氳繃Seam @SecureBindingType 鏉ュ疄鐜幫紝閫氳繃@Secures 娉ㄨВ鏉ュ疄鐜頒竴縐嶆巿鏉冪殑澹版槑銆傛湁榪欎釜鏉冮檺鐨勭敤鎴蜂笉浼?xì)瀵?@ViewPattern榪涜鎷︽埅銆?br /> @RestrictAtPhase 榪欎釜娉ㄨВ鎸囧畾瀵瑰摢涓敓鍛藉懆鏈熻繘琛屼綔鐢ㄣ傞粯璁ゆ槸鍝嶅簲娓叉煋(Render Response)闃舵銆?/span>
@LoggedIn
鎷︽埅楠岃瘉鐢ㄦ埛鏄惁鐧誨綍
涓鑸紝鎴戜滑浼?xì)鍐欎竴涓?All 鐨勬灇涓懼厓绱狅紝鍦ㄥ畠鐨勬敞瑙d笂瀹氫箟 @LoginView @AccessDeniedView 銆?/span>
2. 浣跨敤@SecurdBindingType 鏉ュ垱寤哄畨鍏ㄦ嫤鎴殑娉ㄨВ
@SecurityBindingType
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD, ElementType.METHOD, ElementType.TYPE})
public @
interface User {
}
3. 榪欎釜娉ㄨВ鍏蜂綋鏉冮檺鎺堟潈鏄氳繃鎻愪緵@Secures鐨勪竴涓柟娉曟潵瀹炵幇錛屽畠鐨勮繑鍥炵被鍨嬫槸boolean錛?/span>
public class SecurityRules {
public @Secures @User boolean userChecker(Identity identity) {
if (identity.getUser() == null) {
return false;
} else {
return true;
}
}
}
榪欎釜鏂規(guī)硶鍙槸綆鍗曠殑瀹炵幇浜嗗垽鏂敤鎴鋒槸鍚︾櫥褰曘備篃鍙互閫氳繃 identity 鎷垮埌鐧誨綍鐢ㄦ埛鐨?id 鐒跺悗鏌ュ嚭榪欎釜鐢ㄦ埛鏄惁鍏鋒湁鏌愪竴縐嶆潈闄愶紝鏉ユ帶鍒朵粬鏄惁鑳借闂?br /> 瀹屾暣鐨勪竴涓墽琛岃繃紼嬫槸榪欐牱鐨勶紝褰撲竴涓姹傝闂?pages/* 涓嬮潰鐨勯〉闈㈡椂錛屽湪娓叉煋鍝嶅簲鐨勬椂鍊欙紙Render Response錛夌敓鍛藉懆鏈熼樁孌點(diǎn)傞粯璁ゆ槸榪欎釜闃舵錛屽彲浠ラ氳繃@RestrictAtPhase 鏉ユ寚瀹氥傝繖鏃跺橲eam 鐨勫畨鍏ㄦ満鍒跺氨浼?xì)鎷︽埅杩欎釜璇锋眰锛屾墽琛? 鍏鋒湁 @Secures @User 鐨勯獙璇佹柟娉?userChecker 錛屽鏋滆繑鍥?fasle 錛岃姹傚氨琚嫆緇濓紝閲嶅畾鍚戝埌 @LoginView 瀹氫箟鐨勭櫥褰曢〉闈€傚弽涔嬶紝灝卞彲浠ヨ闂祫婧愩?鎴戜笉鐭ラ亾鑳戒笉鑳?榪斿洖 false 鐨勬椂鍊欏彲浠ヨ煩杞埌鎸囧畾鐨勯〉闈紝榪欎釜榪樻病鏈夊皾璇曘?br /> 鎴戝湪絎竴嬈″皾璇曚嬌鐢?ViewConfig 鐨勬椂鍊欙紝鐘簡涓涓敊璇侤LoginView 瀹氫箟鐨勭櫥褰曢〉闈㈢殑鍚嶅瓧鎴戝啓閿欎簡錛岃繖涓〉闈㈠茍涓嶅瓨鍦紝榪欐牱鐨勭粨鏋滃氨鏄棤璁轟綘鐨勯獙璇佹柟娉曟槸榪斿洖 true 榪樻槸 false 璇鋒眰閮戒細(xì)琚氳繃銆傝繖鏍峰ソ鍍忔湁鐐逛笉澶悎鐞嗭紝綰犵粨鎴戝ソ涔咃紝榪樹互涓篠eam 3.1.0.Final 涓繖涓狟ug榪樺瓨鍦ㄣ?>.<