后台管理员生成策略

问题:至少给出两种方案,第一个管理员从哪里来?

 

1、系统启动的时候,检查数据库,如果没有超级管理员用户则自动创建一个账户
(即ServletContextListener启动时,系统则已启动),它启动在前还是应用启动在前?ServletContextListener启动在前(没办法使用Spring)
2、提供一个toLogin方法,判断如果没有超级管理员,返回一个超级管理员注册页面,在进入后台管理登录页面之前,
先执行login.do(页面也是从后台生成的,将login.html隐藏于WEB-INF中,通过login.do访问)
如果已经有,则跳转超级管理员登录页面
3、第一次启动应用时,会有登录界面,然后再后台写一个Controller(init.do),该方法在没有任何方法查找到连接,相当于其是一个隐藏的路径
只有程序员知道(留后门),返回的是一些系统的初始页面,完成超级管理员注册,如果系统已经初始化完成(即启动完系统,已经初始化系统,然后跳转登录界面)
再访问init.do时就无法访问
4、在Spring启动时,检查数据库,如果没有超级管理员就创建一个默认的,在ServletContextListener中使用JDBC来完成(几乎和第一种方式一样)--监听的是spring的启动

Spring事件机制(在spring中也有类似于Tomcat的事件)ServletContextListener监听的是tomcat的事件,提供两个方法来处理容器的启动以及销毁。

                同理,在spring中也会有相关的事件(也可以在spring中添加一些监听器 来完成监听spring的监听事件)要使用spring的监听机制很简单,在后台创建一个新包(listener)--仅作为分包来用(监听器不是必须放在特定的包中) 

                在Spring中的监听器必须实现一个接口ApplicationListener,就可以作为spring的监听类,来监听spring中特殊的事件ApplicationListener<E>  E为要监听的事件类型

            所有在在Spring中的事件(不管是spring自身的事件还是其他事件,都是ApplicationEvent的子类)类型称为applicationEvent

                相当于在spring中,ApplicationEvent这个类相当于所有的事件(在spring中所有的类不止这个容器启动一种,在spring中可以自己定义事件,tomcat中无法自定义)

                这个时候,如果E为ApplicationEvent,相当于该监听器要监听所有的的事件(消息)

                规定实现一个默认方法:onApplicationEvent(ApplicationEvent event)(表示监听到指定的事件之后要做的操作)
此时,event作为对象传入,即这次监听到的事件

                由于此时我们要监听的是初始化管理员的监听器,还写ApplicationEvent就代表Spring中所有的事件都会被监听到并响应,无法得到自定义的拦截器在什么时候运行
                现在我们只想监听Spring容器启动完成的事件,所以使用另外一种监听器(ContextRefreshedEvent-上下文容器刷新的事件)  容器刷新就是容器启动了,它是spring事件的子事件

测试:
@Autowired
private ILoginInfoService logininfoService;

@Override
public void onApplicationEvent(ContextRefreshedEvent event) {
System.out.println("spring启动好了"+this.logininfoService);
}

如果spring容器启动完成,则可以得到该对象

还需要配置告诉spring,@Component(代表这是一个组件)

如果写在公共模块上,会出问题(该公共模块前后台都需要使用,但该监听器只需要后台使用)

现在就可以完成第一个管理员的初始化动作了




























































 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

phubing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值