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

来源:互联网 发布:淘宝登录首页官网 编辑:程序博客网 时间:2024/05/17 03:33

关于用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 0
原创粉丝点击