拦截器能够通过权限进行拦截,下面写一个小例子
实例分析:
用户登录后可以访问action中的所有方法
User.jsp(执行完该jsp之后,状态变为已登录)
//设置用户登录状态 可以通过session来判断
如果用户没有登录,不允许访问action中的方法,并且提示“你没有权限执行该操作”
User.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
request.getSession().setAttribute("user", "itcast");
%>
用户已经登录
Quit.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
request.getSession().removeAttribute("user");
%>
用户已经退出
message.jsp
${message}
HelloWord.java
private String message;
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public String execute(){
this.message=" execute()";
return "success";
}
UserInterceptor.java
public class UserInterceptor implements Interceptor {
@Override
public void destroy() {
// TODO Auto-generated method stub
}
@Override
public void init() {
// TODO Auto-generated method stub
}
//当拦截到action时调用该方法 该方法相当于 aop编程中的环绕通知
@Override
public String intercept(ActionInvocation interceptor) throws Exception {
// TODO Auto-generated method stub
Object user=ActionContext.getContext().getSession().get("user");
//如果user不为null,代表用户已经登录,运行执行action中的方法
if(user!=null){
return interceptor.invoke();
}
ActionContext.getContext().put("message", "你没有权限执行该操作");
return "message";
}
}
struts.xml
<!-- 注册拦截器 -->
<interceptors>
<interceptor name="user" class="cn.csdn.Interceptor.UserInterceptor"/>
<interceptor-stack name="usetStack">
<!-- 要把系统的拦截器栈放在前面,把自定义的拦截器放在后面 。放在前面会先执行-->
<!-- 引入系统得拦截器栈 -->
<interceptor-ref name="defaultStack"/>
<interceptor-ref name="user"/>
</interceptor-stack>
</interceptors>
<global-results>
<result name="message">/WEB-INF/page/message.jsp</result>
</global-results>
<action name="helloword" class="cn.itcast.action.HelloWordAction" method="execute">
<result name="success">/WEB-INF/page/message.jsp</result>
<!-- 如果这样写的话,虽然能够使用这个自定义的拦截器了,但是会失去struts2一系列的拦截器
如果既想使用自定义拦截器,又不想失去struts2中一系列的拦截器的话,可以定义一个拦截器栈
-->
<!-- <interceptor-ref name="user"/> -->
<!--引入上面定义的拦截器栈 -->
<interceptor-ref name="usetStack"></interceptor-ref>
</action>
</package>
访问:
当直接访问action时,会显示文本你没有权限执行该操作,当访问User.jsp之后再访问action时,显示的文本就为execute()了
注意:如果action中已经有了拦截器,那么所有的默认拦截器都会失效,不过action中可以放置多个拦截器
复习struts2之拦截器
最新推荐文章于 2020-09-08 15:07:31 发布