在Struts2中,可以使用通配符来实现权限控制。以下是实现权限控制的步骤:
在struts.xml
文件中,配置PermissionInterceptor拦截器,并将其添加到需要权限控制的操作上。例如:
<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>
创建一个名为PermissionInterceptor
的类,继承com.opensymphony.xwork2.interceptor.AbstractInterceptor
,并实现intercept()
方法。在这个方法中,编写权限控制的逻辑。例如:
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 {
// 获取当前用户的角色
String role = (String) invocation.getInvocationContext().getSession().getAttribute("role");
// 根据角色判断是否具有访问权限
if (role == null || !hasPermission(role)) {
// 没有权限,返回错误信息
return "login";
}
// 有权限,继续执行操作
return invocation.invoke();
}
private boolean hasPermission(String role) {
// 在这里编写权限控制逻辑,例如根据角色判断是否具有访问权限
// 返回true表示具有权限,返回false表示没有权限
return "admin".equals(role);
}
}
在用户登录成功后,将用户角色设置到会话中,以便在PermissionInterceptor中使用。例如:
session.setAttribute("role", "admin");
通过以上步骤,可以实现基于Struts2通配符的权限控制。当然,这只是一个简单的示例,实际应用中可以根据需求进行更复杂的权限控制。