您的位置:首页 > 其它

自定义拦截器用于用户登录的

2014-06-03 20:32 429 查看
1、编写一个类,实现com.opensymphony.xwork2.interceptor.Interceptor
2、主要实现public String intercept(ActionInvocation invocation) throws Exception{}方法
该方法的返回值就相当于动作的返回值
如果调用了String result = invocation.invoke();得到了动作类的返回的值。
public String intercept(ActionInvocation invocation) throws Exception {
//判断用户是否登录
HttpSession session = ServletActionContext.getRequest().getSession();
Object obj = session.getAttribute("user");
if(obj==null){
return "login";
}else{
return invocation.invoke();//调用动作方法
}
}
3、拦截器定义好后,一定要在配置文件中进行注册:
<interceptors> 只是定义拦截器,并没有起作用
<interceptor name="permissionInterceptor" class="cn.itcast.interceptor.PermissionInterceptor"></interceptor>
</interceptors>
4、配置文件中的动作,要通过
<interceptor-ref name="permissionInterceptor"></interceptor-ref>使用该拦截器
注意:一旦动作中使用了自定义的拦截器,那么默认的就不起作用了。一般应该采用如下的做法:
<interceptor-ref name="defaultStack"></interceptor-ref>
<interceptor-ref name="permissionInterceptor"></interceptor-ref>

多个动作类都要使用的话,可以通过package来进行组合。


struts.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
"http://struts.apache.org/dtds/struts-2.1.7.dtd">
<struts>
<constant name="struts.devMode" value="true"></constant>
<!--    <constant name="struts.ui.theme" value="simple"></constant>-->

<package name="mydefault" extends="struts-default">
<interceptors>
<interceptor name="permissionInterceptor" class="cn.itcast.interceptor.PermissionInterceptor"></interceptor>
<interceptor-stack name="mydefaultstack">            <!-- 集总定义的栈内容   -->
<interceptor-ref name="defaultStack"></interceptor-ref>
<interceptor-ref name="permissionInterceptor"></interceptor-ref>
</interceptor-stack>
</interceptors>
</package>
<package name="user" namespace="/user" extends="mydefault">
<action name="login" class="cn.itcast.domain.User" method="login">  <!--用于处理 login.jsp 中提交的表单,登录的请求-->
<result name="success">/</result>
<result name="login">/login.jsp</result>
</action>
<action name="user_*" class="cn.itcast.domain.User" method="{1}">
<interceptor-ref name="mydefaultstack"></interceptor-ref>      <!--拦截器 引用-->
<result name="success">/listUsers.jsp</result>
<result type="redirectAction" name="delOk">user_listUsers</result>
<result name="input">/{1}.jsp</result>
<result name="saveOk">/success.jsp</result>
<result name="editOk">/success.jsp</result>
<result name="editUI">/editUser.jsp</result>
<result name="showUser">/showUser.jsp</result>
<result name="login">/login.jsp</result>          <!--让拦截器 找的结果-->
</action>
<action name="download" class="cn.itcast.domain.User" method="download">
<interceptor-ref name="mydefaultstack"></interceptor-ref>              <!-- 方便使用一个  -->
<result type="stream" name="success">
<param name="contentType">application/octet-stream</param>
<param name="inputStream">inputStream</param><!-- 输入是对应的动作类中的那个字段-->
<param name="contentDisposition">attachment;filename=${filename}</param><!-- 要下载的文件名-->
</result>
<result name="login">/login.jsp</result>
</action>
</package>
</struts>


java文件

package cn.itcast.interceptor;

import javax.servlet.http.HttpSession;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;

public class PermissionInterceptor implements Interceptor {

@Override
public void destroy() {

}

@Override
public void init() {
System.out.println("PermissionInterceptor intercept         init");
}

@Override
public String intercept(ActionInvocation invocation) throws Exception {
System.out.println("PermissionInterceptor intercept         ");
HttpSession session = ServletActionContext.getRequest().getSession();
Object obj = session.getAttribute("user");
if(obj==null){
return "login";        //返回到 struts.xml中对应的   action下面的result name="longin" 页面
}else{
return invocation.invoke();
}
}

}


User.java中的

public String login()
{
User user=service.login(username, password);
if(user==null)
return LOGIN;
else
{
ServletActionContext.getRequest().getSession().setAttribute("user", user);
return SUCCESS;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: