为什么不是';t自定义实现的VaadinServiceInitListener正在vaadin 13.0.2中侦听吗?
我想验证用户是否已登录。为了实现这一点,我在vaadin 13.0.2中找到了一个名为vaadin ServiceInitListener的东西。该类用于侦听所有UI的BeforeEnter事件,以便在允许进入任何页面之前检查用户是否已登录 我已经创建了一个带有applayout插件的vaadin13.0.2项目,通过实现登录功能和VaadinServiceInitListener来检查用户是否登录为什么不是';t自定义实现的VaadinServiceInitListener正在vaadin 13.0.2中侦听吗?,vaadin,vaadin-flow,Vaadin,Vaadin Flow,我想验证用户是否已登录。为了实现这一点,我在vaadin 13.0.2中找到了一个名为vaadin ServiceInitListener的东西。该类用于侦听所有UI的BeforeEnter事件,以便在允许进入任何页面之前检查用户是否已登录 我已经创建了一个带有applayout插件的vaadin13.0.2项目,通过实现登录功能和VaadinServiceInitListener来检查用户是否登录 public class AAACATInitListener implements Vaadi
public class AAACATInitListener implements VaadinServiceInitListener {
private static final long serialVersionUID = 1L;
private static InAppSessionContextImpl appContextImpl;
@Override
public void serviceInit(ServiceInitEvent event) {
System.out.println("in service init event");
event.getSource().addUIInitListener(new UIInitListener() {
private static final long serialVersionUID = 1L;
@Override
public void uiInit(UIInitEvent event) {
event.getUI().addBeforeEnterListener(new BeforeEnterListener() {
private static final long serialVersionUID = 1L;
@Override
public void beforeEnter(BeforeEnterEvent event) {
appContextImpl = (InAppSessionContextImpl)VaadinSession.getCurrent().getAttribute("context");
if (appContextImpl == null) {
WebBrowser webBrowser = UI.getCurrent().getSession().getBrowser();
String address = webBrowser.getAddress();
if(RememberAuthService.isAuthenticated(address) != null && !RememberAuthService.isAuthenticated(address).isEmpty()) {
//System.out.println("Found Remembered User....");
IBLSessionContext iblSessionContext = null;
try {
iblSessionContext = new UserBLManager().doRememberedStaffUserLogin(RememberAuthService.isAuthenticated(address), "");
if(iblSessionContext != null) {
InAppSessionContextImpl localAppContextImpl = new InAppSessionContextImpl();
localAppContextImpl.setBLSessionContext(iblSessionContext);
localAppContextImpl.setModuleGroupList(iblSessionContext.getSessionAccessControl().getPermittedModuleGroups());
appContextImpl = localAppContextImpl;
event.rerouteTo(ApplicationMainView.class);
}else {
Notification.show("Your access has been expired, Please contact your administrator", 5000, Position.BOTTOM_CENTER);
}
} catch (AuthenticationFailedException e) {
Notification.show("Authentication Failed, Please Reset Cookies And Try Again", 5000, Position.BOTTOM_CENTER);
} catch (Exception e){
e.printStackTrace();
Notification.show("Unexpected Error Occurred, Please Reset Cookies And Try Again", 5000, Position.BOTTOM_CENTER);
}
}else {
System.out.println("Session context is null, creating new context");
appContextImpl = new InAppSessionContextImpl();
VaadinSession.getCurrent().setAttribute("context", appContextImpl);
event.rerouteTo(LoginView.class);
}
} else {
System.out.println("Session context is not null");
InAppSessionContextImpl localAppContextImpl = new InAppSessionContextImpl();
localAppContextImpl.setBLSessionContext(appContextImpl.getBLSessionContext());
localAppContextImpl.setModuleGroupList(appContextImpl.getModuleGroupList());
appContextImpl = localAppContextImpl;
event.rerouteTo(ApplicationMainView.class);
}
}
});
}
});
}
public static void setBLSessionContext(IBLSessionContext iblSessionContext) {
appContextImpl.setBLSessionContext(iblSessionContext);
}
public static void setModuleGroupList(List<ModuleGroupVO> moduleGroupList) {
appContextImpl.setModuleGroupList(moduleGroupList);
}
private class InAppSessionContextImpl implements InAppSessionContext {
private static final long serialVersionUID = 1L;
private List<ModuleGroupVO> moduleGroupList;
private IBLSessionContext iblSessionContext;
private Map<String, Object> attributeMap;
public InAppSessionContextImpl() {
this.attributeMap = new HashMap<String, Object>();
}
@Override
public List<ModuleGroupVO> getModuleGroupList() {
return moduleGroupList;
}
public void setModuleGroupList(List<ModuleGroupVO> moduleGroupList) {
this.moduleGroupList = moduleGroupList;
}
@Override
public IBLSessionContext getBLSessionContext() {
return iblSessionContext;
}
public void setBLSessionContext(IBLSessionContext iblSessionContext) {
this.iblSessionContext = iblSessionContext;
}
@Override
public IBLSession getBLSession() {
if(iblSessionContext != null)
return iblSessionContext.getBLSession();
return null;
}
@Override
public boolean isPermittedAction(String actionAlias) {
if (getBLSessionContext() != null) {
if (getBLSessionContext().getSessionAccessControl() != null) {
return getBLSessionContext().getSessionAccessControl().isPermittedAction(actionAlias);
}
}
return false;
}
@Override
public void setAttribute(String key, Object attribute) {
attributeMap.put(key, attribute);
}
@Override
public Object getAttribute(String key) {
return attributeMap.get(key);
}
}
}
公共类AAACATInitListener实现了VaadinServiceInitListener{
私有静态最终长serialVersionUID=1L;
私有静态InAppSessionContextImpl-appContextImpl;
@凌驾
public void serviceInit(ServiceInitEvent事件){
System.out.println(“服务内初始化事件”);
event.getSource().addUIInitListener(新UIInitListener()){
私有静态最终长serialVersionUID=1L;
@凌驾
public void uiInit(UIInitEvent事件){
event.getUI().addBeforeEnterListener(新的BeforeEnterListener()){
私有静态最终长serialVersionUID=1L;
@凌驾
进入前公共无效(进入前事件){
appContextImpl=(InAppSessionContextImpl)VaadinSession.getCurrent().getAttribute(“上下文”);
if(appContextImpl==null){
WebBrowser WebBrowser=UI.getCurrent().getSession().getBrowser();
字符串地址=webBrowser.getAddress();
if(RememberAuthService.isAuthenticated(address)!=null&&!RememberAuthService.isAuthenticated(address.isEmpty()){
//System.out.println(“找到记住的用户…”);
IBLSessionContext IBLSessionContext=null;
试一试{
iblSessionContext=new UserBLManager().doRememberedStaffUserLogin(RememberAuthService.isAuthenticated(地址),“”);
如果(iblSessionContext!=null){
InAppSessionContextImpl localAppContextImpl=新建InAppSessionContextImpl();
localAppContextImpl.setBLSessionContext(iblSessionContext);
localAppContextImpl.setModuleGroupList(iblSessionContext.getSessionAccessControl().getPermittedModuleGroups());
appContextImpl=localAppContextImpl;
重新路由到(ApplicationMainView.class);
}否则{
通知。显示(“您的访问权限已过期,请与管理员联系”,5000,位置。底部\u中心);
}
}捕获(身份验证失败异常e){
通知。显示(“身份验证失败,请重置Cookies并重试”,5000,位置。底部\u中心);
}捕获(例外e){
e、 printStackTrace();
通知.show(“发生意外错误,请重置Cookies并重试)”,5000,位置。底部\u中心);
}
}否则{
System.out.println(“会话上下文为空,正在创建新上下文”);
appContextImpl=新的InAppSessionContextImpl();
VaadinSession.getCurrent().setAttribute(“上下文”,appContextImpl);
重新路由到(LoginView.class);
}
}否则{
System.out.println(“会话上下文不为空”);
InAppSessionContextImpl localAppContextImpl=新建InAppSessionContextImpl();
localAppContextImpl.setBLSessionContext(appContextImpl.getBLSessionContext());
localAppContextImpl.setModuleGroupList(appContextImpl.getModuleGroupList());
appContextImpl=localAppContextImpl;
重新路由到(ApplicationMainView.class);
}
}
});
}
});
}
公共静态无效setBLSessionContext(IBLSessionContext IBLSessionContext){
appContextImpl.setBLSessionContext(iblSessionContext);
}
公共静态无效setModuleGroupList(列表moduleGroupList){
appContextImpl.setModuleGroupList(模块组列表);
}
AppSessionContextImpl中的私有类在AppSessionContext中实现{
私有静态最终长serialVersionUID=1L;
私有列表模块组列表;
私有IBLSessionContext IBLSessionContext;
私有地图属性映射;
公共InAppSessionContextImpl(){
this.attributeMap=newhashmap();
}
@凌驾
公共列表getModuleGroupList(){
返回模块组列表;
}
public void setModuleGroupList(列表moduleGroupList){
this.moduleGroupList=moduleGroupList;
}
@凌驾
公共IBLSessionContext getBLSessionContext(){
返回iblSessionContext;
}
public void setBLSessionContext(IBLSessionContext IBLSessionContext){
this.iblSessionContext=iblSessionContext;
}
@凌驾
公共会话getBLSession(){
如果(iblSessionContext!=null)
返回iblSessionContext.getBLSession();
返回null;
}
@凌驾
公共布尔值许可证
public class MainView extends VerticalLayout implements RouterLayout, BeforeEnterObserver {
...
@Override
public void beforeEnter(BeforeEnterEvent event) {
...
}
}