struts2权限拦截器
时间: 2023-09-24 15:11:06 浏览: 147
Struts2利用拦截器实现权限控制
5星 · 资源好评率100%
在 Struts2 中,可以使用拦截器来实现权限控制。具体来说,可以编写一个自定义的拦截器,然后在 struts.xml 配置文件中将其配置为需要进行权限控制的 Action 的拦截器。以下是一个简单的权限拦截器示例:
```java
public class AuthInterceptor extends AbstractInterceptor {
@Override
public String intercept(ActionInvocation invocation) throws Exception {
// 获取当前用户
User user = (User) ActionContext.getContext().getSession().get("user");
// 判断用户是否拥有权限
if (user != null && user.hasPermission(invocation.getInvocationContext().getName())) {
// 如果有权限,则继续执行 Action
return invocation.invoke();
} else {
// 如果没有权限,则跳转到错误页面
return "error";
}
}
}
```
在上述代码中,我们首先获取了当前用户,然后判断用户是否拥有执行当前 Action 的权限。如果有权限,则继续执行 Action;否则,跳转到错误页面。
接下来,在 struts.xml 配置文件中,我们可以将该拦截器配置为需要进行权限控制的 Action 的拦截器,如下所示:
```xml
<action name="myAction" class="com.example.MyAction">
<interceptor-ref name="authInterceptor"/>
<result name="success">/myAction.jsp</result>
<result name="error">/error.jsp</result>
</action>
<interceptor-stack name="authStack">
<interceptor-ref name="authInterceptor"/>
<interceptor-ref name="defaultStack"/>
</interceptor-stack>
<interceptors>
<interceptor name="authInterceptor" class="com.example.AuthInterceptor"/>
</interceptors>
```
在上述代码中,我们首先定义了一个名为 authStack 的拦截器栈,该拦截器栈包含了 authInterceptor 和 defaultStack 两个拦截器。然后,我们将 myAction Action 配置为使用 authStack 拦截器栈。最后,我们定义了一个名为 authInterceptor 的拦截器,并将其添加到了 interceptors 中。
这样一来,当用户访问 myAction Action 时,就会先执行 authInterceptor 拦截器,进行权限控制,然后再执行 defaultStack 拦截器栈中的其它拦截器。如果 authInterceptor 拦截器返回了 error,则会跳转到 error.jsp 页面;否则,会跳转到 myAction.jsp 页面。
阅读全文