java—不同的用戶登錄以后可以看到不同的菜單(后台可以實現對用戶菜單的管理) 1 (55)


實現不同的用戶登錄以后可以看到不同的菜單。(后台可以實現對用戶菜單的管理。)

第一步:分析數據結構

       1:用戶表

表名:users

列名

類型

說明

id

Varchar(32)

主鍵

name

Varchar(30)

 

      2:菜單表

 

第二步:寫入表中幾行數據進行基本分析

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;

    

  連接數據庫的工具類:

第三步:設計界面

第四步:實現用戶登錄

分包:提供用戶的登錄,退出修改

    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;

        String uri = req.getRequestURI();//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

    }

}

流程圖

認證過程

登錄過程:

顯示菜單的過程:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM