授權
授權通常會在認證後進行,意味着誰可以訪問什麼。 Mentawai採用簡單有效的方法進行用戶授權。在Mentawai中,你可以告訴框架一個授權用戶屬於那些組,以便於稍後web應用根據這些信息判斷哪些訪問該接受還是拒絕。例如,你可能有些action必須需要ADMIN組纔可以訪問,對JSP頁同樣如此。 更有趣的是,一個JSP頁面可能對某些用戶隱藏一塊或一部分。
告訴框架用戶屬於哪個組:
public class LoginAction extends BaseLoginAction {
@Override
public String execute() {
// (...)
setSessionObj(u);
setSessionGroups(u.getGroup());
setSessionLocale(u.getLocale());
return SUCCESS;
}
}
你可以在setSessionGroups方法中傳一到多個字符串(”admin”, “editor”, “guest”, 等)。它的參數是可變參數。此外,你也可以傳遞一個到多個枚舉類 (Group.ADMIN, Group.EDITOR, Group.GUEST, 等)。
授權一個action只對某些組有效:
action("/User", UserAction.class, "edit")
.authorize(Group.ADMIN, Group.MASTER)
.on(ACCESSDENIED, exception("Only admin and master can modify a user!"))
.on(ERROR, fwd("/jsp/user/edit.jsp"))
.on(SHOW, fwd("/jsp/user/edit.jsp"))
.on(UPDATED, fwd("/jsp/index.jsp"));
NOTE: 上述第二行等同於 .authorize(“ADMIN”, “MASTER”)
授權實際上是一個被實現的過濾器,一旦授權失敗,就會返回一個ACCESSDENIED的結果。這個結果配置後,就會拋出有信息提示的異常結果。
TIP: 除了拋出異常, 你也可以配置 ACCESSDENIED 結果重定向到一個友好頁,用來對用戶解釋用戶無權訪問該action 。
一個JSP頁只授權給某些組:
<%@ page contentType="text/html; charset=UTF-8"%>
<%@taglib prefix="mtw" uri="http://www.mentaframework.org/tags-mtw/"%>
<mtw:requiresAuthorization groups="ADMIN, MASTER" />
NOTE: 無論你在應用配置中心對ACCESSDENIED配置的結果如何,在此都將是如此。
一個JSP頁面的部分授權給某些組:
<%@ page contentType="text/html; charset=UTF-8"%>
<%@taglib prefix="mtw" uri="http://www.mentaframework.org/tags-mtw/"%>
<mtw:hasAuthorization groups="ADMIN, MASTER">
Only authorized people can see this.
</mtw:hasAuthorization>
TIP: 你可以在上述標籤上使用屬性negate=”true” 來反轉條件,因此你可以輕易實現類似於else 式的聲明。