package com.mvc.test;

 import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashSet;
import java.util.Set; /**
* 用户是否登录,使用全局方法
*
* @author liuwenlong
* @create 2020-09-09 09:23:23
*/
@SuppressWarnings("all")
@WebServlet(urlPatterns = "/login")
public class Application_Test extends HttpServlet { @Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html;charset=UTF-8");
PrintWriter out = resp.getWriter();
String user = req.getParameter("user");
if (user == null) {
req.getSession().removeAttribute("islogin");
out.print("无效的用户或者密码!");
return;
} if ("zs".equals(user)) {
UserInfo userInfo = new UserInfo(user, "1010", "1", req.getSession().getId());
req.getSession().setAttribute("islogin", userInfo);
out.print("成功");
} else if ("ls".equals(user)) {
UserInfo userInfo = new UserInfo(user, "0101", "1" , req.getSession().getId());
req.getSession().setAttribute("islogin", userInfo);
out.print("成功");
} else {
out.print("无效用户或者密码");
} } //发心跳,接收新的心跳,如果关闭浏览器,就接收不到新的心跳,时间就会超时
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html;charset=UTF-8");
PrintWriter out = resp.getWriter();
String user = req.getParameter("user");//取出用户
String key = "islogin_" + user;//这个用户,然后设置这个用户的时间,重新刷新时间
String id = (String) req.getServletContext().getAttribute(key + "id");
String id2 = req.getSession().getId(); req.getServletContext().setAttribute(key + "_t", System.currentTimeMillis());//记录时间
if (id != id2) {
req.getSession().setAttribute("islogin", "notlogin");
out.print(user + "已经在设备" + id + "登录");
} else {
out.print("OK");
}
}
}

定义一个Bean

 package com.mvc.test;

 /**
* 访问控制 控制权限
*
* @author liuwenlong
* @create 2020-09-09 13:37:37
*/
@SuppressWarnings("all")
public class UserInfo {
private String userid;
private String privi;
private String heart;
private String appid; public UserInfo() {
} public UserInfo(String userid, String privi, String heart, String appid) {
this.userid = userid;
this.privi = privi;
this.heart = heart;
this.appid = appid;
} public String getUserid() {
return userid;
} public void setUserid(String userid) {
this.userid = userid;
} public String getPrivi() {
return privi;
} public void setPrivi(String privi) {
this.privi = privi;
} public String getHeart() {
return heart;
} public void setHeart(String heart) {
this.heart = heart;
} public String getAppid() {
return appid;
} public void setAppid(String appid) {
this.appid = appid;
} @Override
public String toString() {
return "UserInfo{" +
"userid='" + userid + '\'' +
", privi='" + privi + '\'' +
", heart='" + heart + '\'' +
", appid='" + appid + '\'' +
'}';
}
}

写一个JSP文件,显示

 <%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%--权限--%>
${sessionScope.logininfo}
</body>
</html>

写一个过滤器

 package com.mvc.test;

 import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.logging.LogRecord; /**
* @author liuwenlong
* @create 2020-09-09 13:50:04
*/
@SuppressWarnings("all")
//向服务器发起的请求,都要在这里过滤
@WebFilter(urlPatterns = "/*")
public class MyFilter implements Filter { @Override
public void init(FilterConfig filterConfig) throws ServletException { } @Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain Chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse resp = (HttpServletResponse) response; req.setCharacterEncoding("utf-8");
resp.setCharacterEncoding("utf-8");
String sURI = req.getRequestURI();
UserInfo userInfo = (UserInfo) req.getSession().getAttribute("islogin");
System.out.println(sURI); if (!(sURI.endsWith("login")
|| sURI.endsWith("login.jsp")
|| sURI.endsWith(".js")
|| sURI.endsWith(".css")
|| sURI.endsWith(".png")
)) {
if (userInfo == null) {
req.getSession().setAttribute("error", "pls login");
resp.sendRedirect("login.jsp");
// resp.sendRedirect(req.getContextPath() + "/login.jsp"); //重新定向login.jsp
return;
}
} //控制器权限
//0 [member]0[good]0[order]0[any]
String action[] = {"member", "good", "order", "any"}; int pos = sURI.lastIndexOf("/");
sURI =sURI.substring(pos+1);
System.out.println(sURI); if (userInfo != null) {
String sPrive = userInfo.getPrivi();//取出权限
int i = 0;
for (; i < action.length; i++) {
if (sURI.endsWith(action[i])) {
break;
}
} if (i < action.length) {
char ch = sPrive.charAt(i);
if (ch == '1') {
req.getSession().setAttribute("logininfo", userInfo.getUserid() + "有"+action[i]+"权限");
resp.sendRedirect("qx.jsp");
return;
} else {
req.getSession().setAttribute("logininfo", userInfo.getUserid() + "没有"+action[i]+"权限");
resp.sendRedirect( "qx.jsp");
return;
}
} } Chain.doFilter(request, response);
} @Override
public void destroy() { }
}

测试:先登录zs  ls

然后每个人访问:member   good  any等 ,出现下列效果

Java使用Filter用户权限控制的更多相关文章

  1. Java成员的访问权限控制

    Java中的访问权限控制包含两个部分: 类的访问权限控制 类成员的访问权限控制 对类来说,访问权限控制修饰符可以是public或者无修饰符(默认的包访问权限): 对于类成员来说,访问权限控制修饰符可以 ...

  2. 浅析Java中的访问权限控制

    浅析Java中的访问权限控制 今天我们来一起了解一下Java语言中的访问权限控制.在讨论访问权限控制之前,先来讨论一下为何需要访问权限控制.考虑两个场景: 场景1:工程师A编写了一个类ClassA,但 ...

  3. linux下通过acl配置灵活目录文件权限(可用于ftp,web服务器的用户权限控制)

    linux下通过acl配置灵活目录文件权限(可用于ftp,web服务器的用户权限控制) 发表于2012//07由feng linux 本身的ugo rwx的权限,对于精确的权限控制很是力不从心的,ac ...

  4. Vue-Access-Control:前端用户权限控制解决方案

    原文地址:http://refined-x.com/2017/11/28/Vue2.0用户权限控制解决方案/ Vue-Access-Control是一套基于Vue/Vue-Router/axios 实 ...

  5. asp.net core根据用户权限控制页面元素的显示

    asp.net core根据用户权限控制页面元素的显示 Intro 在 web 应用中我们经常需要根据用户的不同允许用户访问不同的资源,显示不同的内容,之前做了一个 AccessControlHelp ...

  6. Java基础之访问权限控制

    Java基础之访问权限控制 四种访问权限 Java中类与成员的访问权限共有四种,其中三种有访问权限修饰词:public,protected,private. Public:权限最大,允许所有类访问,但 ...

  7. java filter 实现权限控制

    import javax.servlet.*; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.Http ...

  8. 基于RESTful API 怎么设计用户权限控制?

    前言 有人说,每个人都是平等的:也有人说,人生来就是不平等的:在人类社会中,并没有绝对的公平,一件事,并不是所有人都能去做:一样物,并不是所有人都能够拥有.每个人都有自己的角色,每种角色都有对某种资源 ...

  9. 基于RESTful API 设计用户权限控制

    RESTful简述 本文是基于RESTful描述的,需要你对这个有初步的了解. RESTful是什么? Representational State Transfer,简称REST,是Roy Fiel ...

随机推荐

  1. C++ 的字符串反转

    C++ 的字符串反转 方法一: 使用 algorithm 中的 reverse 函数: // reverse 函数的定义(在 std 名称空间中) template<class BidirIt& ...

  2. k8s使用需认证的私服仓库

    本文内容 在K8s中使用需认证的私服仓库需要导入认证信息到集群中,常规导入方式有两种: 使用Docker已登录的仓库密文导入 使用命令行创建Secret对象导入 本文介绍的就是以上两种方法. 使用Do ...

  3. 03 Arduino-模拟输出与PWM的操作方法

    在arduino开发板上面,标注为PWM的管脚的可以被当作数模转换管脚使用 01 模拟输出  analogWrite(pin, value) pin: 选定的引脚号码  value:取值范围 0-25 ...

  4. mycat数据库集群系列之数据库多实例安装

    mycat数据库集群系列之数据库多实例安装 最近在梳理数据库集群的相关操作,现在花点时间整理一下关于mysql数据库集群的操作总结,恰好你又在看这一块,供一份参考.本次系列终结大概包括以下内容:多数据 ...

  5. Salesforce学习笔记之代码若干

    有几段试验性的代码因为公司要更新沙盒,删除了.在本地虽然还保存了副本,但怕以后刷新时误删,所以贴一份在这里,以便需要时拷贝. 1.用aura组件包装一个flow foo.cmp: <aura:c ...

  6. 修改linux 动态ip为静态ip

    vi /etc/sysconfig/network-scripts/ifcfg-ens33 BOOTPROTO=static 设置网卡引导协议为 静态 ONBOOT=yes 网卡开机自启动 配置[IP ...

  7. Hadoop的源码编译

    目录 正文 1.准备阶段 使用root登录Centos,并且要求能够正常连接网络.配置清单如下: (1)hadoop-2.7.2-src.tar.gz (2)jdk-8u144-linux-x64.t ...

  8. 第3章 SparkSQL解析

    第3章 SparkSQL解析 3.1 新的起始点SparkSession 在老的版本中,SparkSQL提供两种SQL查询起始点,一个叫SQLContext,用于Spark自己提供的SQL查询,一个叫 ...

  9. MySQL数据库根据一个或多个字段查询重复数据

    系统在开发测试过程中出现bug,比如并发操作没有处理好,数据库中往往会插入重复数据,这些脏数据经常会导致各种问题.bug可以修改,但是数据往往也要处理,处理SQL如下: 1.根据一个字段查找重复数据 ...

  10. 认证授权:学习OAuth协议

    1.什么是OAuth协议? OAUTH协议为用户资源的授权提供了一个安全的.开放而又简易的标准.同时,任何第三方都可以使用OAuth认证服务,任何服务提供商都可以实现自身的OAuth认证服务,因而OA ...