首页 > 编程语言 >java—不同的用户登录以后可以看到不同的菜单(后台可以实现对用户菜单的管理) 1 (55)

java—不同的用户登录以后可以看到不同的菜单(后台可以实现对用户菜单的管理) 1 (55)

时间:2022-11-30 12:37:22浏览次数:34  
标签:insert 菜单 java into 用户 values import id

实现不同的用户登录以后可以看到不同的菜单。(后台可以实现对用户菜单的管理。)

第一步:分析数据结构

       1:用户表

表名:users

列名

类型

说明

id

Varchar(32)

主键

name

Varchar(30)


      2:菜单表

java—不同的用户登录以后可以看到不同的菜单(后台可以实现对用户菜单的管理) 1  (55)_scala

 

第二步:写入表中几行数据进行基本分析

insert into users values('U001','Jack','1234');

insert into users values('U002','张三','4321');

insert into users values('U003','Tom','1111');

 

insert into roles values('R001','管理员','');

insert into roles values('R002','教师','');

 

insert into roleuser values('U001','R001');

insert into roleuser values('U002','R002');

 

insert into menus values('M001','系统管理','/sys.jsp');

insert into menus values('M002','用户管理','/user.jsp');

insert into menus values('M003','角色管理','/role.jsp');

 

insert into rolemenu values('M001','R001');

insert into rolemenu values('M002','R001');

insert into rolemenu values('M003','R001');

insert into rolemenu values('M003','R002');

 

/*查询某个拥有某个角色*/

select u.name,r.name

from users u inner join roleuser ru on u.id=ru.uid

             inner join roles r on ru.rid=r.id;

            

/*某角色拥有某菜单*/

select r.name,m.name

from roles r inner join rolemenu rm on r.id=rm.rid

             inner join menus m on rm.mid=m.id;

 

            

/*查询某人拥有某个菜单*/

select u.name,m.name

from users u inner join roleuser ru on u.id=ru.uid

             inner join roles r on ru.rid=r.id

             inner join rolemenu rm on r.id=rm.rid

             inner join menus m on rm.mid=m.id;

第三步:创建JavaBean(领域模型)和工具类

public class User {

    private String name;

    private String id;

    private String pwd;

    

  连接数据库的工具类:

java—不同的用户登录以后可以看到不同的菜单(后台可以实现对用户菜单的管理) 1  (55)_java_02

第三步:设计界面

java—不同的用户登录以后可以看到不同的菜单(后台可以实现对用户菜单的管理) 1  (55)_sql_03

第四步:实现用户登录

分包:提供用户的登录,退出修改

    Cn.hx.user.

                userServlet

                service

                 userService

                dao

                    userDao

 

菜单

Cn.hx.menu

            MenuServlet

            MenuService

            MenuDao

 

角色

 

对主页面来只有Servvlet没有service,调用别的service实现。

Cn.hx.main

            MainServlet

            (没有Service)

第五步:开发登录页面

<form name="name" action="<c:url value='/UserServlet?cmd=login'/> " method="post">

       Name:<input type="text" name="name"/><br/>

pwd:<input type="text" name="pwd"/><br/>

       <input type="submit"/>

   </form>

第六步:开发整个的usre包

Cn.hx.user.

                userServlet

                service

                 userService

                dao

                    userDao

第七步:实菜单的查询功能

              菜单是菜单的功能包。

              主功能,有自己的servvlet MainServvlet


第八步:使用过虑器验证/jsp/*

       这只是第一步,只是验证用户有没有访问的凭证。认证.

过滤器验证类:

package cn.hx.filter;

import java.io.IOException;

import javax.servlet.Filter;

import javax.servlet.FilterChain;

import javax.servlet.FilterConfig;

import javax.servlet.ServletException;

import javax.servlet.ServletRequest;

import javax.servlet.ServletResponse;

import javax.servlet.http.HttpServletRequest;

import org.apache.commons.dbutils.QueryRunner;

import org.apache.commons.dbutils.handlers.ScalarHandler;

import cn.hx.domain.User;

import cn.hx.utils.DataSourceUtils;

 

public class AuthFilter implements Filter {

    public void init(FilterConfig filterConfig) throws ServletException {

        // TODO Auto-generated method stub

       

    }

    public void doFilter(ServletRequest request, ServletResponse response,

            FilterChain chain) throws IOException, ServletException {

uri

        HttpServletRequest req = (HttpServletRequest) request;

​Http://localhost:8080/day20/jsps/role.jsp->day20/jsps/role.jsp​

        uri = uri.replace(req.getContextPath(), "");

sql

        String sql = "SELECT COUNT(1)"+

                     " FROM menus m INNER JOIN rolemenu rm ON m.id=rm.mid"+

                     " INNER JOIN roles r ON r.id=rm.rid"+

                     " INNER JOIN roleuser ru ON r.id=ru.rid"+

                     " WHERE ru.uid=? AND url=?";

       //取到用户的id

        User user = (User) req.getSession().getAttribute("user");

        try{

            QueryRunner run = new QueryRunner(DataSourceUtils.getDatasSource());

            Object o = run.query(sql,new ScalarHandler(),user.getId(),uri);

            int size = Integer.parseInt(o.toString());

            if(size==0){

                System.err.println("你没有权限....");

            }else{

                chain.doFilter(req, response);

            }

        }catch(Exception e){

        }

    }

    public void destroy() {

        // TODO Auto-generated method stub

    }

}

流程图

认证过程

java—不同的用户登录以后可以看到不同的菜单(后台可以实现对用户菜单的管理) 1  (55)_sql_04

登录过程:

java—不同的用户登录以后可以看到不同的菜单(后台可以实现对用户菜单的管理) 1  (55)_sql_05

显示菜单的过程:

java—不同的用户登录以后可以看到不同的菜单(后台可以实现对用户菜单的管理) 1  (55)_scala_06

源码面前,了无秘密



标签:insert,菜单,java,into,用户,values,import,id
From: https://blog.51cto.com/zhenghongxin/5898232

相关文章

  • 7种最佳JavaScript日期库
    英文|https://blog.logrocket.com/javascript-date-libraries/从理论上讲,向您的应用程序添加工作日期似乎总是一件容易的事,除非您尝试这样做。总是会遇到麻烦,无论是在尝试......
  • 【文章精选集锦】Java 内存模型与 volatile :happens-before,重排序,内存屏障
    【文章精选集锦】Java内存模型与volatile:happens-before,重排序,内存屏障Kotlin开发者社区 3天前很多时候,千言万语不如一张图:  停停停,发错了,看下面的JVM内存模型图: ......
  • Java并发编程实战: AQS 源码 史上最详尽图解+逐行注释
    Java并发编程实战:AQS源码史上最详尽图解+逐行注释引言:学习一个java并发编程工具的时候,我们首先要抓住这三点:状态一般是一个state属性,它基本是整个工具的核心,通常整个......
  • JAVA变量
    http://developer.51cto.com/art/200907/137104.htm关于JDK+Tomcat+eclipse+MyEclipse的配置方法2009-07-1616:47cinderellacinderella.javaeye.com我要评论(0)字号......
  • Java JIT小记
    来自这篇文章的小总结。  Java程序的大致执行流程: 两类即时编译器,对比:ClientCompiler:启动快、运行慢(因为只注重简单的局部编译优化),例如HotSpot虚拟机的C1Compi......
  • java学习笔记DOM4J解析(7)
    DOM4J即DocumentObjectModelforJava使用java技术以文档方式解析XML数据的模型。DOM4J是开源组织提供的一个免费的、强大的XML解析工具,如果开发者需要在项目中使用那么需......
  • Java学习笔记XML(3)
    XML简介XML即可扩展的标记语言。因此该语言中所有的标签都是没有预先定义的,开发者可以自己随意的指定。目前为止所有的标记的语言都属于开源的语言。由W3C组织进行一个基本......
  • Java中将double转换为int
    可以通过三种方式将double转换为int1、将double转换为int—使用类型转换2、将double转换为int—使用Math.round()3、将double转换为int—使用Double.IntValue()1.......
  • 你必须要知道的JavaScript数据结构与面试题解答
    英文原文|https://dev.to/educative/7-javascript-data-structures-you-must-know-4k0m原文作者|RyanThelin和AmandaFawcett译文翻译|web前端开发(web_qdkf)解决编码......
  • 如何使用函数式编程写更简洁的JavaScript代码
    英文| https://dev.to/r0r71z/javascript-write-cleaner-code-with-functional-programming-279a翻译|web前端开发(ID:web_qdkf)作为一个Web全栈开发人员,我花了很多时间......