# myhomework_003 **Repository Path**: ea-creator/myhomework_003 ## Basic Information - **Project Name**: myhomework_003 - **Description**: 一、编程题 手写MVC框架基础上增加如下功能 1)定义注解@Security(有value属性,接收String数组),该注解用于添加在Controller类或者Handler方法上,表明哪些用户拥有访问该Handler方法的权限(注解配置用户名) 2)访问Handler时,用户名直接以参数名username紧跟在请求的url后面即可,比如http://localhost:8080/demo/handle01?username=zhangsan 3)程序要进行验证,有访问权限则放行,没有访问权限在页面上输出 注意:自己造几个用户以及url,上交作业时,文档提供哪个用户有哪个url的访问权限 二、作业资料说明: 1、提供资料:代码工程、验证及讲解视频。 2、讲解内容包含:题目分析、实现思路、代码讲解。 3、效果视频验证 1)展示关键实现代码 2)有访问权限则放行,没有访问权限在页面上输出 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-01-14 - **Last Updated**: 2021-01-14 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ---------------------------------------------------------------------- 一、编程题 手写MVC框架基础上增加如下功能 1)定义注解@Security(有value属性,接收String数组),该注解用于添加在Controller类或者Handler方法上,表明哪些用户拥有访问该Handler方法的权限(注解配置用户名) 2)访问Handler时,用户名直接以参数名username紧跟在请求的url后面即可,比如http://localhost:8080/demo/handle01?username=zhangsan 3)程序要进行验证,有访问权限则放行,没有访问权限在页面上输出 注意:自己造几个用户以及url,上交作业时,文档提供哪个用户有哪个url的访问权限 二、作业资料说明: 1、提供资料:代码工程、验证及讲解视频。 2、讲解内容包含:题目分析、实现思路、代码讲解。 3、效果视频验证 1)展示关键实现代码 2)有访问权限则放行,没有访问权限在页面上输出 ============================================================================================= # 1. 实现思路: ============================================================================================= 1. @LagouSecurity注解(类注解,方法注解)<---LagouSecurity.java 2. 解析@LagouSecurity注解 3. Handler(pojo)中加入一个可以储存该Handler可以访问的用户一览(HashSet) 4. 在com.lagou.edu.mvcframework.servlet.LgDispatcherServlet增加一个 private Boolean securityFilter(HttpServletRequest req,Handler handler)方法, 用于在通过getHandler()获取handler值前过滤一下权限:如果用户名在Hander的用户的HashSet中则认为有访问权限 ============================================================================================= # 2. 代码结构 ============================================================================================= mvc | mvc.iml | pom.xml | ReadMe.txt <---本文档 +---src | +---main | | +---java | | | \---com | | | \---lagou | | | \---edu | | | +---demo | | | | +---controller | | | | | DemoController.java <---分别给类和方法加上自定义注解,修改query方法让其可以在画面上面显示结果 | | | | | | | | | \---service | | | | | IDemoService.java | | | | | | | | | \---impl | | | | DemoServiceImpl.java <---简单改一下方法的参数名和打印结果 | | | | | | | \---mvcframework | | | +---annotations | | | | LagouAutowired.java | | | | LagouController.java | | | | LagouRequestMapping.java | | | | LagouSecurity.java <---新增自定义注解 | | | | LagouService.java | | | | | | | +---pojo | | | | Handler.java <---新增字段private Set UserSet; // @Security 注解中包含的用户一览 | | | | | | | \---servlet | | | LgDispatcherServlet.java <----重点修改对象: | | | 1.新增下面的方法,对于@LagouSecurity注解标注的可访问用户进行过滤 | | | private Boolean securityFilter(HttpServletRequest req,Handler handler) | | | 2.修改下面的方法,其实返回handler对象值前过滤权限 | | | private Handler getHandler(HttpServletRequest req) | | | 3.修改下面的方法,对自定义注解进行解析,并将解析到的可访问用户放到handler对象中 | | | private void initHandlerMapping() | | +---resources | | | springmvc.properties | | | | | \---webapp | | | index.jsp | | | | | \---WEB-INF | | web.xml | | | \---test | \---java | MyTest.java ======================================================================== # 3. 可访问用户(下面以外不可访问) ======================================================================== ## 3.1. @LagouSecurity({"Root","SysAdmin"}) 类的注解上标注的可访问用户测试连接: http://localhost:8080/demo/handle01?username=Root http://localhost:8080/demo/handle01?username=SysAdmin ## 3.2. @LagouSecurity({"User1","User2"}) 方法的注解上标注的可访问用户测试连接: http://localhost:8080/demo/handle01?username=User1 http://localhost:8080/demo/handle01?username=User2 ======================================================================== # 4. 可访问和不可访问的显示结果: ======================================================================== ## 4.1 有访问权限:则在画面上显示(其中@@@username@@@代表可访问的用户名) ----------@@@username@@@: is ok ------- ## 4.2 无访问权限:则在画面上显示 404 not found ========================================================================