GWT权限验证:父类的普通方法调用父类抽象方法,而该抽象方法由其子类实现
GWT权限验证:父类BaseActivity继承com.google.gwt.activity.shared.AbstractActivity实现start方法,在start方法中调用一个约束子类的抽象方法showStart方法,从而实现每一次访问都需要进行权限验证,这一点类似filter的思想,代码片段如下:。
package com.cdl.client.activity;import com.google.gwt.activity.shared.AbstractActivity;import com.google.gwt.event.shared.EventBus;import com.google.gwt.json.client.JSONObject;import com.google.gwt.json.client.JSONParser;import com.google.gwt.json.client.JSONValue;import com.google.gwt.place.shared.PlaceController;import com.google.gwt.user.client.rpc.AsyncCallback;import com.google.gwt.user.client.ui.AcceptsOneWidget;import com.google.gwt.user.client.ui.VerticalPanel;import com.cdl.client.GreetingServiceAsync;import com.cdl.client.place.LoginPlace;import com.cdl.client.util.ForWordString;import com.cdl.client.util.tool.ClientFactory;import com.cdl.client.util.tool.LayoutMenuiteComponent;import com.cdl.client.util.tool.UserTool;import com.cdl.client.view.compoment.MenuitemComponment;public abstract class BaseActivity extends AbstractActivity {protected ClientFactory factory;protected VerticalPanel contentVerPanel;private MenuitemComponment navMenu;private LayoutMenuiteComponent menuiteComponment = UserTool.getLayOutMenuite();public BaseActivity(ClientFactory factory) {this.factory = factory;}/** 这个start方法主要用来做权限验证,然后再调用startShow方法 */@Overridepublic void start(final AcceptsOneWidget panel, final EventBus eventBus) {GreetingServiceAsync service = UserTool.getGreetingservice();service.validateAdminLogin(new AsyncCallback<String>() {@Overridepublic void onSuccess(String serverResult) {JSONValue serverVal = JSONParser.parseStrict(serverResult);JSONObject serverJson = serverVal.isObject();boolean status = serverJson.get("status").isBoolean().booleanValue();if (status) {contentVerPanel = new VerticalPanel();navMenu = menuiteComponment.getMenuitemComponment();int type = (int) serverJson.get("type").isNumber().doubleValue();// 根据管理员类型的不同,在contentVerPanel添加是否包含administration的水平导航菜单if (type == 1) {contentVerPanel.add(navMenu.createSuperAdminMenuHPanel());} else {contentVerPanel.add(navMenu.createNormalAdminMenuHPanel());}//子类实现的父类方法startShow(panel, eventBus);} else {PlaceController placeGo = UserTool.getClientfactory().getPlaceController();placeGo.goTo(new LoginPlace(ForWordString.LOGINPLACE));}}@Overridepublic void onFailure(Throwable caught) {PlaceController placeGo = UserTool.getClientfactory().getPlaceController();placeGo.goTo(new LoginPlace(ForWordString.LOGINPLACE));}});}/** 用户在start方法中验证权限后进入视图*/public abstract void startShow(AcceptsOneWidget panel, EventBus eventBus);}