使用注解(Annotation)实现系统登录检查和权限控制
来源:互联网 发布:钢结构图纸及数据图片 编辑:程序博客网 时间:2024/06/05 14:15
系统的大量操作都必须在用户登录的状态下进行,特别是后台管理系统。在进行系统开发时,进行登录状态检查是必不可少的步骤。此处采用注解的方法,实现登录检查。
第一步,新建注解AllowAnonymous和HasPermission("Permission String")
@Target(value=ElementType.METHOD)@Retention(value=RetentionPolicy.RUNTIME)public @interface AllowAnonymous {}
@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)public @interface HasPermission {public String value();}
第二步,建立BasicServlet
在BasicServlet中通过反射读取注解信息,如果没有标记AllowAnonymous,则说明操作需要进行登录检查。对不需要登录就可以进行的操作,需要标记AllowAnonymous。
public class BasicServlet extends HttpServlet {@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {this.doGet(req, resp);}@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {String action=req.getParameter("action");if (StringUtils.isEmpty(action)) {AdminUtils.showError(req, resp, "action error");return;}Class cls=this.getClass();try {Method methodAction=cls.getMethod(action, HttpServletRequest.class,HttpServletResponse.class);AllowAnonymous allowAnonymous=methodAction.getAnnotation(AllowAnonymous.class);if (allowAnonymous==null) {//need to check login statusLong adminUserId=AdminUtils.getAdminUserId(req);if (adminUserId==null) {String ctxPath=req.getContextPath();AdminUtils.showError(req, resp, "未登陆<a target='_top' href='"+ctxPath+"/Index?action=login'>点此登录</a>");return;}HasPermission hasPermission=methodAction.getAnnotation(HasPermission.class);if (hasPermission!=null) {AdminUserService adminUserService=new AdminUserService();boolean isOk=adminUserService.hasPermission(adminUserId, hasPermission.value());if (!isOk) {AdminUtils.showError(req, resp, "无权访问");return;}}}methodAction.invoke(this, req,resp);} catch (Exception e) {//异常处理} }}
第三部,建立其它Servlet,继承BasicServlet
@WebServlet("/Index")public class IndexServlet extends BasicServlet {public void index(HttpServletRequest req,HttpServletResponse resp) throws ServletException, IOException{req.getRequestDispatcher("/WEB-INF/index.jsp").forward(req, resp);} //登录操作,不需要进行登录检查,标记AllowAnonymous @AllowAnonymous public void login(HttpServletRequest req,HttpServletResponse resp) throws ServletException, IOException{ req.getRequestDispatcher("/WEB-INF/login.jsp").forward(req, resp); } }
public class RoleServlet extends BasicServlet { //标记需要的权限@HasPermission("Role.Query")public void list(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {try {RoleService roleService = new RoleService();RoleDTO[] roles = roleService.getAllNotDeleted();request.setAttribute("roles", roles);request.getRequestDispatcher("/WEB-INF/role/roleList.jsp").forward(request, response);} catch (ServletException | IOException e) {AdminUtils.showError(request, response, "Service Error");}}}
阅读全文
1 0
- 使用注解(Annotation)实现系统登录检查和权限控制
- 第7篇:ui-router登录检查实现权限控制
- 深入理解Java的Annotation系列-第四部分 注解的应用-使用注解实现权限管理
- 在struts2.1中使用注解和拦截器实现权限细粒度控制
- 在struts2.1中使用注解和拦截器实现权限细粒度控制
- 使用Struts2的拦截器和自定义注解方式实现权限控制
- AOP/CGLIB学习:实现简单的注解权限系统(Annotation+拦截器)
- annotation 注解做springmvc 的登录权限校验案例
- spring-09-如何实现登录权限检查
- Struts2拦截器 实现未登录拦截和权限控制
- Struts2拦截器 实现未登录拦截和权限控制
- 实现基于注解(Annotation)的数据库框架(四)注解(Annotation)和反射的结合使用
- 使用sharedPreferences实现密码登录和注册用户名重复检查
- spring AOP 注解实现登录权限拦截
- 【Annotation】使用自定义注解实现依赖注入
- Android注解使用之Annotation实现原理
- 使用Servlet Filter实现系统登录权限校验
- 细粒度 自定义注解 权限控制具体实现
- HTTP协议
- 关于测试流程
- 爱测未来安全-从SSL加密到Es数据加密再到HTTPS配置到 SSL理解(二)
- 如何解决jquery与第三方插件库冲突问题
- 打印出所有的"水仙花数"
- 使用注解(Annotation)实现系统登录检查和权限控制
- qml滚轮事件
- Android应用集成高德地图
- 爬虫的自我解剖(抓取网页HtmlUnit)
- excel比较两组或两列数据的相同项和不同项
- 在内存剖析对象
- Oracle REF动态游标
- leetcode 第13题 Roman to Integer
- 提交网址到Google搜索引擎