要求:
手写MVC框架基础上增加如下功能
1)定义注解@Security(有value属性,接收String数组),该注解用于添加在Controller类或者Handler方法上,表明哪些用户拥有访问该Handler方法的权限(注解配置用户名)
2)访问Handler时,用户名直接以参数名username紧跟在请求的url后面即可,比如http://localhost:8080/demo/handle01?username=zhangsan
3)程序要进行验证,有访问权限则放行,没有访问权限在页面上输出
springMvc的执行流程:
前端控制器-------------处理器映射器(返回handleExcutionChain处理器映射链,拦截器和handler)------处理器适配器(找到handler)------返回modleandview()
1:容器启动------web.xml中找到前端控制器,和控制器初始化文件
2:springMvc.properties中配置和springmvc注解扫描先关组件
application.properties文件中只是配置要扫描的包到SpringMVC容器中。
3:web.xml在容器启动时,启动监听器;初始化bean,并配置applicationContext*.xml来获取spring相关配置和bean:
4:处理器映射器:将url和method方法封装到handlerMappinng中返回:
每一次请求将会调用doGet或doPost方法,所以统一运行阶段都放在doDispatch方法里处理,它会根据url请求去HandlerMapping中匹配到对应的Method,然后利用反射机制调用Controller中的url对应的方法,并得到结果返回
自定义注解:
@Security
```
@Target({ElementType.TYPE,ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface Security {
String value()default "";
}
```
然后创建MyDispatcherServlet这个类,去继承HttpServlet,重写init方法、doGet、doPost方法,以及加上我们第二步分析时要实现的功能:
初始化方法
扫描相关的类
将类名存到集合中
实现依赖注入
@Target({ElementType.TYPE,ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface Security {
String value()default "";
}写注解
在前端控制器的dopost方法中添加判断