Java Web入门之用Filter实现用户权限的管理

来源:互联网 发布:淘宝开放平台api 编辑:程序博客网 时间:2024/06/05 05:26

很简单的用户权限管理,就是根据用户权限对不同的url进行过滤。
设定登陆成功在session里写入super属性来存储权限信息,所以只有登陆成功后session里才会有super这个属性。
denied.html可以防在WEB-INF文件夹里,这样就不能直接访问,只能用forward跳转访问。

FilterChain的逻辑

/login.html过滤器

这个过滤器一定要放在/*过滤器之前,否则会造成死循环。

Object logined = session.getAttribute("super");if (logined == null)    forward to "/login.html";else    redirect to "/center.html";

/check.jsp过滤器

这个过滤器一定要放在/*过滤器之前,否则会造成无法验证登陆。

Object logined = session.getAttribute("super");if (logined == null)    forward to "/check.html";else    redirect to request.getContextPath()+"/center.html";

/*过滤器

Object logined = session.getAttribute("super");if (logined == null)    redirect to request.getContextPath()+"/login.html";else    chain.doFilter(request, response);


1-2顺序可变,但一定要在3之前;3之后的过滤器顺序可变,但一定要在3之后。

剩下的过滤器逻辑类似,假设需要区分super和ordinary用户,则分别新建两个过滤器,过滤/super/*/ordinary/*

if(session.getAttribute("super").toString().contains("word"))    chain.doFilter(request, response);else    forward to "/denied.jsp";

check.jsp的逻辑

<%@ page contentType="text/html;charset=UTF-8" pageEncoding="utf-8" %><html>    <meta http-equiv=Content-Type content="text/html;charset=utf-8"><head>    <title>check</title></head><body>    <%    response.setHeader("progma","no-cache");    response.setHeader("Cache-Control","no-cache");    response.setDateHeader("Expires",0);    String username = request.getParameter("username");    String password = request.getParameter("password");    if (username == null || password == null)        response.sendRedirect(request.getContextPath()+"/login.html");    else if (username.equals("admin") && password.equals("123")) {        session.setAttribute("super","super");        response.sendRedirect(request.getContextPath()+"/center.html");    }    else {        response.setHeader("refresh","3;url=login.html");    %>    用户不存在或密码错误,3秒后自动返回登陆界面。<br>    如果没有返回,请点击<a href="login.html">此处</a>。    <%}%></body></html>

login.html的代码

<html><meta http-equiv=Content-Type content="text/html;charset=utf-8"><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0"><head>    <title>login</title>    <script type="text/javascript">    function Check() {        with(document.info) {            var uname = username.value;            var psd = password.value;            if(uname == null || uname == "") alert("用户名为空");            else if (psd == null || psd == "") alert("密码为空");            else submit();        }    }    </script></head><body><br><br><br><br><center>    <form name="info" action="check.jsp" method="post">        <table>            <tr><td colspan="2" align="center">用户登录</td></tr>            <tr><td>登录名:</td><td><input type="text" name="username"></td></tr>            <tr><td>密码:</td><td><input type="password" name="password"></td></tr>        </table>        <input type="button" value="登录" onclick="Check()">&nbsp;&nbsp;&nbsp;        <input type="reset" value="重置">    </form></center></body></html>

注意,check.jsp和login.html里需要设置页面不缓存。
check.jsp密码验证部分应当从数据库里取用户名、密码、权限信息,这里为方便简化了。

0 0