常用内建表示式
ps: 定義在 SecurityExpressionRoot表示式 | 說明 |
---|---|
hasRole('role') | 當前的 User 擁有指定的 Role 就回傳 true |
hasAnyRole('role1', 'role2') | 當前的 User 擁有任一個 Role 就回傳 true |
principal | 當前的 User 的 Principal 物件 |
authentication | 當前的 User 的 Authentication 物件 |
permitAll | 總是為 true |
denyAll | 總是為 false |
isAnonymous() | 當前的 User 是匿名登入就回傳 true |
isRememberMe() | 當前的 User 是透過 remember-me 登入就回傳 true |
isAuthenticated() | 當前的 User 不是匿名登入就回傳 true |
isFullyAuthenticated() | 當前的 User 不是匿名登入或 remember-me 登入就回傳 true |
在方法執行前的驗證
驗證 User 角色
@PreAuthorize("hasRole('ROLE_USER')") public void create(Contact contact);
驗證參數值是否等於 User 名稱
@PreAuthorize("#contact.name == authentication.name") public void doSomething(Contact contact);
驗證 User 角色以及來源 IP 區間
@PreAuthorize("hasRole('admin') and hasIpAddress('192.168.1.0/24')") public void doSomething(Contact contact);
在方法內的驗證
取得角色驗證
@RequestMapping("/index") public void index(HttpServletRequest request) { System.out.println(request.isUserInRole("ROLE_USER")); if (request.isUserInRole("admin")) { System.out.println("is admin"); } }
在 JSP 的驗證
取得 User 名稱
<sec:authentication property="name"/> <sec:authentication property="principal.username"/>
取得 User IP
<sec:authentication property="details.remoteAddress"/>
取得 User SessionId
<sec:authentication property="details.sessionId"/>
驗證角色為 admin 才顯示
<sec:authorize access="hasRole('admin')"> <div>is admin</div> </sec:authorize>
驗證角色為 admin 存入變數 isAdmin
<sec:authorize var="isAdmin" access="hasRole('admin')" /> <c:if test="isAdmin"> <div>is admin</div> </c:if>
參考自:15. Expression-Based Access Control
沒有留言:
張貼留言
你好!歡迎你在我的 Blog 上留下你寶貴的意見。