关于用Struts2 拦截器做手机端token的验证

关于用Struts2 拦截器做手机端token的验证,手机端请求服务器端任何接口,都要自动通过拦截器进入自定义拦截类中走一趟,当手机端拿着token进入时 就开始判断 token是否有效,无效的话任何接口调不到,并返回错误代码101。自定义拦截类可根据自己的需求来写
拦截器设置 Struts.xml

     <package name="sel" namespace="" extends="json-default">

        <!--  <interceptors>  
        <interceptor name="MyInterceptor" class="自定义的拦截类地址"/>  
        </interceptors>   -->

        <interceptors>
            <!-- 定义权限控制拦截器 -->
            <interceptor name="MyInterceptor"
                class="自定义的拦截类地址" />
            <!-- 定义一个包含权限控制的拦截器栈 -->
            <interceptor-stack name="mydefault">
                <interceptor-ref name="defaultStack" />
                <interceptor-ref name="MyInterceptor" />
            </interceptor-stack>
        </interceptors>
        <!-- 定义默认拦截器 -->
        <default-interceptor-ref name="mydefault" />
         <!-- 设置全局拦截器验证错误输出-->
         <global-results>
                <result name="error" type="json">
                    <param name="root">result</param>
                </result>
        </global-results>
     </package> 
     <!-- 由于是设置了全局拦截 所以其他的包都要集成拦截器的包-->
<package name="selPackage" namespace="" extends="sel">

自定义拦截器类


import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import com.app.xxx.xxx;
import com.app.service.xxxService;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor; 
import org.apache.struts2.ServletActionContext;
import org.springframework.beans.factory.annotation.Autowired;


//需实现Interceptor类
public class TokenUtil implements Interceptor{
    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    private static final String YAN = "XXXXX";// 加盐
    @Autowired
    private static XXX xxx;
    @Autowired
    private  XxxService xxxServices;

    public TokenUtil() {
    }

    /**
     * 产生一个token
     */
    public static Token generateToken(String uniq) {
        Token token = new Token(MD5.toMD5(System.currentTimeMillis()+YAN+uniq), System.currentTimeMillis());
        return token;
    }


    @Override
    public void destroy() {
        // TODO Auto-generated method stub
        System.out.println("---------destroy()---------");  
    }

    @Override
    public void init() {
        // TODO Auto-generated method stub
        System.out.println("---------init()---------"); 


    }

    public String intercept(ActionInvocation invocation) throws Exception {
        // TODO Auto-generated method stub
         ActionContext ctx = ActionContext.getContext(); 
        Map<String, Object> jsonResult = new HashMap<>();
        HttpServletRequest request=ServletActionContext.getRequest();
        String token =  request.getHeader("xxxx");//获取客户端储存的token 

        try{

                if (System.currentTimeMillis() >  xxx.getTokentime()) {
                //当token失效,将数据库中的token和有效时间替换掉,内容随意填
                    XXX.update("",  -1, "",xxx.id());
                    //错误返回输出
                      jsonResult.put("resultCode", "100 ");
                        ctx.put("result", jsonResult); 
                          return "error";
                }else{
                    String Dbtoken = xxx.getToken();
                     if (Dbtoken != null && Dbtoken.equals(token)){
                     //如果通过就放行 return invocation.invoke();  
                         return invocation.invoke();  
                     }else{
                         jsonResult.put("resultCode", "101");
                          ctx.put("result", jsonResult); 
                           return "error";
                     }
                }
           }catch(NullPointerException e)
            {
                jsonResult.put("resultCode", "102");
                    ctx.put("result", jsonResult); 
                       return "error";
            }
     }
--------------------------------------------------------------------------- 
    get and  set

}

我是将 自己生成的token存入数据库中 然后验证
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值