在Struts2中,可以使用通配符來實現(xiàn)權(quán)限控制。以下是實現(xiàn)權(quán)限控制的步驟:
在struts.xml
文件中,配置PermissionInterceptor攔截器,并將其添加到需要權(quán)限控制的操作上。例如:
<struts>
<package name="default" extends="struts-default">
<interceptors>
<interceptor name="permissionInterceptor" class="com.example.PermissionInterceptor" />
<interceptor-stack name="authStack">
<interceptor-ref name="defaultStack" />
<interceptor-ref name="permissionInterceptor" />
</interceptor-stack>
</interceptors>
<action name="admin" class="com.example.AdminAction">
<interceptor-ref name="authStack" />
<result name="success">/admin.jsp</result>
<result name="login">/login.jsp</result>
</action>
</package>
</struts>
創(chuàng)建一個名為PermissionInterceptor
的類,繼承com.opensymphony.xwork2.interceptor.AbstractInterceptor
,并實現(xiàn)intercept()
方法。在這個方法中,編寫權(quán)限控制的邏輯。例如:
package com.example;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
public class PermissionInterceptor extends AbstractInterceptor {
@Override
public String intercept(ActionInvocation invocation) throws Exception {
// 獲取當(dāng)前用戶的角色
String role = (String) invocation.getInvocationContext().getSession().getAttribute("role");
// 根據(jù)角色判斷是否具有訪問權(quán)限
if (role == null || !hasPermission(role)) {
// 沒有權(quán)限,返回錯誤信息
return "login";
}
// 有權(quán)限,繼續(xù)執(zhí)行操作
return invocation.invoke();
}
private boolean hasPermission(String role) {
// 在這里編寫權(quán)限控制邏輯,例如根據(jù)角色判斷是否具有訪問權(quán)限
// 返回true表示具有權(quán)限,返回false表示沒有權(quán)限
return "admin".equals(role);
}
}
在用戶登錄成功后,將用戶角色設(shè)置到會話中,以便在PermissionInterceptor中使用。例如:
session.setAttribute("role", "admin");
通過以上步驟,可以實現(xiàn)基于Struts2通配符的權(quán)限控制。當(dāng)然,這只是一個簡單的示例,實際應(yīng)用中可以根據(jù)需求進行更復(fù)雜的權(quán)限控制。