How to redirect to login page after session expire in GWT RPC call

后端 未结 8 1254
死守一世寂寞
死守一世寂寞 2020-12-13 07:44

I am using GWT and RPC in my app. after session expires when I do a RPC call, because of my login-filter the request redirect to login.jsp, but my problem is client doen\'t

8条回答
  •  佛祖请我去吃肉
    2020-12-13 08:23

    I put a little fix to MyProxyCreator's @Piotr version, adpated to GWT 2.5

    package my.package.server;
    
    import java.util.Map;
    
    import com.google.gwt.core.ext.typeinfo.JClassType;
    import com.google.gwt.core.ext.typeinfo.JMethod;
    import com.google.gwt.core.ext.typeinfo.TypeOracle;
    import com.google.gwt.user.rebind.SourceWriter;
    import com.google.gwt.user.rebind.rpc.ProxyCreator;
    import com.google.gwt.user.rebind.rpc.SerializableTypeOracle;
    
    
    public class MyProxyCreator extends ProxyCreator {
    
        private final String methodStrTemplate = "@Override\n"
                + "protected  com.google.gwt.http.client.Request doInvoke(ResponseReader responseReader, "
                + "String methodName, RpcStatsContext statsContext, String requestData, "
                + "com.google.gwt.user.client.rpc.AsyncCallback callback) {\n"
                + "${method-body}" + "}\n";
    
        public MyProxyCreator(JClassType serviceIntf) {
            super(serviceIntf);
        }
    
        @Override
        protected void generateProxyMethods(SourceWriter w, SerializableTypeOracle serializableTypeOracle, TypeOracle typeOracle, Map syncMethToAsyncMethMap) {
            // generate standard proxy methods
            super.generateProxyMethods(w, serializableTypeOracle, typeOracle, syncMethToAsyncMethMap);
    
            // generate additional method
            overrideDoInvokeMethod(w);
        }
    
        private void overrideDoInvokeMethod(SourceWriter w) {
            StringBuilder methodBody = new StringBuilder();
            methodBody.append("final com.google.gwt.user.client.rpc.AsyncCallback newAsyncCallback = new my.package.client.MyAsyncCallback(callback);\n");
            methodBody.append("return super.doInvoke(responseReader, methodName, statsContext, requestData, newAsyncCallback);\n");
    
            String methodStr = methodStrTemplate.replace("${method-body}",methodBody);
            w.print(methodStr);
        }
    
    }
    

    It changed the methods signs for generateProxyMethods and doInvoke.

    Best Regards.

    iVieL

提交回复
热议问题