当前位置: 首页 > news >正文

权限模块_分配权限_实现分配权限(登录与注销)的基本功能

权限模块_分配权限_实现分配权限的基本功能

选哪个就能存起来那个,能回显。有依赖关系

把一组相关功能放在一起

RoleAction.java

    /**
     * 设置权限页面
     */
    public String setPrivilegeUI() {
        
        //准备回显的数据
        Role role = roleService.getById(model.getId());
        ActionContext.getContext().getValueStack().push(role);//放到栈顶,从栈顶找对象
        
        if(role.getPrivileges() != null) {
            privilegeIds = new Long[role.getPrivileges().size()];//Long数组放拥有的权限Id
            int index = 0;
            for(Privilege priv : role.getPrivileges()) {
                privilegeIds[index++] = priv.getId();//从0开始把权限Id找出来
                
            }
        }
        return "setPrivilegeUI";
    }
    /**
     * 设置权限
     */
    public String setPrivilege() {
        //1.从数据库中获取原对象
        Role role = roleService.getById(model.getId());//role是根据id来的
        
        //2.设置要修改的属性
        List<Privilege> privilegeList = privilegeService.getByIds(privilegeIds);
        role.setPrivileges(new HashSet<Privilege>(privilegeList));
        
        //3.更新到数据库
        roleService.update(role);
        
        return "toList";
    }
    private Long[] privilegeIds;

    public void setPrivilegeIds(Long[] privilegeIds) {
        this.privilegeIds = privilegeIds;
    }

    public Long[] getPrivilegeIds() {
        return privilegeIds;
    }

PrivilegeService.java

public interface PrivilegeService extends DaoSupport<Privilege> {
}

PrivilegeServiceImpl.java

@Service
@Transactional
public class PrivilegeServiceImpl extends DaoSupportImpl<Privilege> implements PrivilegeService{
}

BaseAction.java中增加

@Resource 
protected PrivilegeService privilegeService;

在struts.xml中岗位管理增加一个属性

<result name="setPrivilegeUI">/WEB-INF/jsp/roleAction/setPrivilegeUI.jsp</result>

在roleAction文件夹中增加一个setPrivilegeUI.jsp页面

setPrivilegeUI.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<title>配置权限</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <%@ include file="/WEB-INF/jsp/public/commons.jspf" %>
    <script language="javascript" src="${pageContext.request.contextPath}/script/jquery_treeview/jquery.treeview.js"></script>
    <link type="text/css" rel="stylesheet" href="${pageContext.request.contextPath}/style/blue/file.css" />
    <link type="text/css" rel="stylesheet" href="${pageContext.request.contextPath}/script/jquery_treeview/jquery.treeview.css" />

    <script type="text/javascript">
         // 选择所有
        function selectAll(checkedValue){
            $("input[type=checkbox][name=resourceIdList]").attr("checked", checkedValue);
        }
        
        function doChecked( liID, checkedValue ){
            // 当前点击的checkbox元素所在的li元素
            var jLi = $("#" + liID);

            // 选中所有的直属下级。(children()方法是筛选下一级,find()是筛选所有后代)
            jLi.children("ul").find("input[type=checkbox]").attr("checked", checkedValue);
            
            // 选中或取消选中直属上级
            if( checkedValue ){ // checkedValue是boolean型,表示是否选中了当前复选框
                // 如果当前是选中,则选中所有的直属上级
                jLi.parents("li").children("input[type=checkbox]").attr("checked", checkedValue);
            }else{
                // 如果当前是取消选中,并且同级中没有被选中的项,则也取消上级的选中状态
                var jCheckedSibingCB = jLi.siblings("li").children("input[type=checkbox]:checked");
                if(jCheckedSibingCB.size() == 0){
                    var jCheckboxInput = jLi.parent("ul").prev("label").prev("input[type=checkbox]");
                    jCheckboxInput.attr("checked", checkedValue);
                    
                    // 递归操作每一层直属上级
                    var jParentLi = jCheckboxInput.parent("li");
                    if(jParentLi.size() > 0){
                        doChecked(jParentLi.attr("id"), checkedValue);
                    }
                }
            }
        } 
        
        $(function(){
            $("#tree").treeview();
        });
    </script>
</head>
<body>

<!-- 标题显示 -->
<div id="Title_bar">
    <div id="Title_bar_Head">
        <div id="Title_Head"></div>
        <div id="Title"><!--页面标题-->
            <img border="0" width="13" height="13" src="${pageContext.request.contextPath}/style/images/title_arrow.gif"/> 配置权限
        </div>
        <div id="Title_End"></div>
    </div>
</div>

<!--显示表单内容-->
<div id=MainArea>
    <s:form action="role.setPrivilege">
    
    <s:hidden name="id"></s:hidden>
        <div class="ItemBlock_Title1"><!-- 信息说明 --><div class="ItemBlock_Title1">
            <img border="0" width="4" height="7" src="${pageContext.request.contextPath}/style/blue/images/item_point.gif" /> 正在为【${name}】配置权限 </div> 
        </div>
        
        <!-- 表单内容显示 -->
        <div class="ItemBlockBorder">
            <div class="ItemBlock">
                <table cellpadding="0" cellspacing="0" class="mainForm">
                    <!--表头-->
                    <thead>
                        <tr align="LEFT" valign="MIDDLE" id="TableTitle">
                            <td width="300px" style="padding-left: 7px;">
                                <!-- 如果把全选元素的id指定为selectAll,并且有函数selectAll(),就会有错。因为有一种用法:可以直接用id引用元素 -->
                                <input type="CHECKBOX" id="cbSelectAll" onClick="selectAll(this.checked)"/>
                                <label for="cbSelectAll">全选</label>
                            </td>
                        </tr>
                    </thead>
                   
                       <!--显示数据列表-->
                    <tbody id="TableData">
                        <tr class="TableDetail1">
                            <!-- 显示权限树 -->
                            <td>
                            <s:checkboxlist name="privilegeIds" list="#privilegeList" listKey="id" listValue="name"></s:checkboxlist>
                            </td>
                        </tr>
                    </tbody>
                </table>
            </div>
        </div>
        
        <!-- 表单操作 -->
        <div id="InputDetailBar">
            <input type="image" src="${pageContext.request.contextPath}/style/images/save.png"/>
            <a href="javascript:history.go(-1);"><img src="${pageContext.request.contextPath}/style/images/goBack.png"/></a>
        </div>
    </s:form>
</div>

<div class="Description">
    说明:<br />
    1,选中一个权限时:<br />
    &nbsp;&nbsp;&nbsp;&nbsp; a,应该选中 他的所有直系上级。<br />
    &nbsp;&nbsp;&nbsp;&nbsp; b,应该选中他的所有直系下级。<br />
    2,取消选择一个权限时:<br />
    &nbsp;&nbsp;&nbsp;&nbsp; a,应该取消选择 他的所有直系下级。<br />
    &nbsp;&nbsp;&nbsp;&nbsp; b,如果同级的权限都是未选择状态,就应该取消选中他的直接上级,并递归向上做这个操作。<br />

    3,全选/取消全选。<br />
    4,默认选中当前岗位已有的权限。<br />
</div>

</body>
</html>

全选

权限模块__使用权限__实现登录与注销的功能

UserAction.java

/** 登录页面 */
    public String loginUI() {
        
        return "loginUI";
    }
    /** 登录 */
    public String login() {
        User user = userService.findByLoginNameAndPassword(model.getLoginName(),model.getPassword());
        if(user == null) {
            addFieldError("login","用户名或密码不正确");
            return "loginUI";
        }else {
            //登录用户
            ActionContext.getContext().getSession().put("user", user);
            return "toIndex";
        }
        
    }
    /** 注销 */
    public String logout() {
        ActionContext.getContext().getSession().remove("user");
        return "logout";
    }

Struts.xml中用户管理新增3个属性

 

   <result name="loginUI">/WEB-INF/jsp/userAction/loginUI.jsp</result>
    <result name="logout">/WEB-INF/jsp/userAction/logout.jsp</result>
    <result name="toIndex" type="redirectAction">/index.jsp</result

Action中

  addFieldError("name", "有错了!");

JSP中:

  <s:fielderror fieldName="name"/>

  <s:fielderror/>显示全部错误消息

UserService.java

 

public interface UserService extends DaoSupport<User>{
    /**
     * 根据用户名与密码查询用户
     * @param loginName
     * @param password
     * @return
     */
    User findByLoginNameAndPassword(String loginName, String password);

}

UserServiceImpl.java

 

@Service
@Transactional    //可以不用写了,因为父类有
public class UserServiceImpl extends DaoSupportImpl<User> implements UserService{

    public User findByLoginNameAndPassword(String loginName, String password) {
        
        //使用密码的MD5摘要进行对比
        String md5Digest = DigestUtils.md5Hex(password);
        return (User) getSession().createQuery(//
                "FROM User u WHERE u.longinName=? AND u.password=?")//
                .setParameter(0, loginName)//
                .setParameter(1, md5Digest)//
                .uniqueResult();
    }
}

loginUI.jsp

<%@ page language="java" pageEncoding="UTF-8"%>
<html>
<head>
    <title>Itcast OA</title>
    <%@ include file="/WEB-INF/jsp/public/commons.jspf" %>
    <link href="${pageContext.request.contextPath}/style/blue/login.css" type=text/css rel=stylesheet>
    <script type="text/javascript">
        $(function(){
            document.forms[0].loginName.focus();
        });
        
        // 在被嵌套时就刷新上级窗口
        if(window.parent != window){
            window.parent.location.reload(true);
        }
    </script>
</head>

<body leftmargin=0 topmargin=0 marginwidth=0 marginheight=0 class=PageBody >



<!-- 显示表单 -->
<s:form action="user_login" focusElement="loginNameInput">
    <div id="CenterAreaBg"> 
        <div id="CenterArea">
            <div id="LogoImg"><img border="0" src="${pageContext.request.contextPath}/style/blue/images/logo.png" /></div>
            <div id="LoginInfo">
                <table BORDER=0 CELLSPACING=0 CELLPADDING=0 width=100%>
                    <tr>
                        <td colspan="3"><!-- 显示错误 -->
                            <font color="red"><s:fielderror/></font>
                        </td>
                    </tr>
                    <tr>
                        <td width=45 class="Subject"><img border="0" src="${pageContext.request.contextPath}/style/blue/images/login/userId.gif" /></td>
                        <td>
                            <s:textfield name="loginName" size="20" tabindex="1" cssClass="TextField required" id="loginNameInput" />
                        </td>
                        <td rowspan="2" style="padding-left:10px;">
                            <input type="image" tabindex="3" src="${pageContext.request.contextPath}/style/blue/images/login/userLogin_button.gif" />
                        </td>
                    </tr>
                    <tr>
                        <td class="Subject"><img border="0" src="${pageContext.request.contextPath}/style/blue/images/login/password.gif" /></td>
                        <td><s:password name="password" id="aa" size="20" tabindex="2" showPassword="false" cssClass="TextField required" /></td>
                    </tr>
                </table>
            </div>
            <div id="CopyRight"><a href="javascript:void(0)">&copy; 2010 版权所有 yejing</a></div>
        </div>
    </div>
    </s:form>
</body>

</html>

Logout.jsp

<%@ page language="java" pageEncoding="UTF-8"%>
<html>
<head>
    <title>您已退出Itcast OA系统</title>
     <%@ include file="/WEB-INF/jsp/public/commons.jspf" %>
    <link href="${pageContext.request.contextPath}/style/blue/logout.css" rel="stylesheet" type="text/css">
</head>

<body>
    <table border=0 cellspacing=0 cellpadding=0 width=100% height=100%>
        <tr>
            <td align=center>
                <div id=Logout>
                    <div id=AwokeMsg>
                        <img id=LogoutImg src="${pageContext.request.contextPath}/style/blue/images/logout/logout.gif" border=0>
                        <img id=LogoutTitle src="${pageContext.request.contextPath}/style/blue/images/logout/logout1.gif" border=0>
                    </div>
                    <div id=LogoutOperate>
                        <img src="${pageContext.request.contextPath}/style/blue/images/logout/logout2.gif" border=0> 
                        <a href="${pageContext.request.contextPath}/user_loginUI.action">重新进入系统</a> 
                        <img src="${pageContext.request.contextPath}/style/blue/images/logout/logout3.gif" border=0> 
                        <a href="javascript: window.open('','_self');window.close();">关闭当前窗口</a>
                    </div>
                </div>
            </td>
        </tr>
    </table>
</body>
</html>

Index.jsp

访问http://localhost:8080/ItcastOA/user_login.action

输入密码1234登录成功后

http://localhost:8080/ItcastOA/user_login.action

转载于:https://www.cnblogs.com/justdoitba/p/7820061.html

相关文章:

  • 通过配置php来屏蔽PHP错误
  • [转载]写单元测试的好处
  • bootstrap-胶囊式标签页
  • [MYSQL]mysql常用操作命令
  • MongoDB被全球最大的分类信息网站Craigslist使用
  • 进程终结
  • Kubelet无法访问rancher-metadata问题分析
  • RIA Service 的 SOAP EndPoint
  • Servlet总结
  • js读取xml文档,并实现简单分页
  • linux 查找僵死进程,并杀死进程
  • 过滤并替换页面html输出
  • Goldengate实现在线数据迁移
  • 新浪就微博受病毒攻击事件致歉
  • 11g新特性:Note raised when explain plan for create index
  • 30天自制操作系统-2
  • 5分钟即可掌握的前端高效利器:JavaScript 策略模式
  • Android 控件背景颜色处理
  • CSS居中完全指南——构建CSS居中决策树
  • echarts花样作死的坑
  • ES6语法详解(一)
  • java B2B2C 源码多租户电子商城系统-Kafka基本使用介绍
  • java 多线程基础, 我觉得还是有必要看看的
  • JavaScript 事件——“事件类型”中“HTML5事件”的注意要点
  • Java教程_软件开发基础
  • Java精华积累:初学者都应该搞懂的问题
  • jdbc就是这么简单
  • Js基础知识(四) - js运行原理与机制
  • Kibana配置logstash,报表一体化
  • MYSQL如何对数据进行自动化升级--以如果某数据表存在并且某字段不存在时则执行更新操作为例...
  • oschina
  • Phpstorm怎样批量删除空行?
  • vuex 笔记整理
  • WePY 在小程序性能调优上做出的探究
  • 从tcpdump抓包看TCP/IP协议
  • 一个完整Java Web项目背后的密码
  • 自定义函数
  • 7行Python代码的人脸识别
  • ​低代码平台的核心价值与优势
  • ​七周四次课(5月9日)iptables filter表案例、iptables nat表应用
  • ​云纳万物 · 数皆有言|2021 七牛云战略发布会启幕,邀您赴约
  • ​总结MySQL 的一些知识点:MySQL 选择数据库​
  • #define MODIFY_REG(REG, CLEARMASK, SETMASK)
  • #NOIP 2014# day.1 生活大爆炸版 石头剪刀布
  • #中的引用型是什么意识_Java中四种引用有什么区别以及应用场景
  • (+3)1.3敏捷宣言与敏捷过程的特点
  • (zt)基于Facebook和Flash平台的应用架构解析
  • (动手学习深度学习)第13章 计算机视觉---微调
  • (附源码)spring boot北京冬奥会志愿者报名系统 毕业设计 150947
  • (论文阅读23/100)Hierarchical Convolutional Features for Visual Tracking
  • (原創) 如何刪除Windows Live Writer留在本機的文章? (Web) (Windows Live Writer)
  • (转)EOS中账户、钱包和密钥的关系
  • ./mysql.server: 没有那个文件或目录_Linux下安装MySQL出现“ls: /var/lib/mysql/*.pid: 没有那个文件或目录”...
  • .h头文件 .lib动态链接库文件 .dll 动态链接库
  • .NET 设计一套高性能的弱事件机制