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. 2020重新出发,JAVA入门,标识符&修饰符

    标识符(Identifier ) 标识符是程序员用来命名变量,方法,类或标签的单词,其实就是我们在开发过程中凡是自己可以命名的一些单词就是标识符 标识符命名规则 标识符由字母(a-z,A-Z),数字( ...

  2. 将Asp.Net Core3.1项目,使用Docker 部署到Centos 8

    一.准备工具 Win 10 Centos 8 Visual Studio 2019 Docker Desktop  下载地址:https://download.docker.com/win/stabl ...

  3. C#LeetCode刷题之#575-分糖果​​​​​​​(Distribute Candies)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3798 访问. 给定一个偶数长度的数组,其中不同的数字代表着不同种 ...

  4. Java 创建、刷新Excel透视表/设置透视表行折叠、展开

    透视表是依据已有数据源来创建的交互式表格,我们可在excel中创建透视表,也可编辑已有透视表.本文以创建透视表.刷新透视表以及设置透视表的行展开或折叠为例,介绍具体的操作方法. 所需工具:Free S ...

  5. ElasticSearch在CentOS的安装

    ElasticSearch在CentOS的安装 一.tar包安装 单机安装 创建elastic用户,ElasticSearch不支持root用户运行 useradd elastic 上传文件到 /so ...

  6. kafka-clients 1.0 高阶API消费消息(未完)

    消费消息的请求(按序) org/apache/kafka/common/requests/RequestHeader org/apache/kafka/common/requests/ApiVersi ...

  7. Python爬取表结构数据---pandas快速获取

    例如: 此形式的表数据,可用pandas获取 首先获取table import requests from lxml import etree import pandas as pd url = 'h ...

  8. Html5与CSS3(选择器)

    <!-- 作者:offline 时间:2018-03-21 描述:1.全选择器 *{属性1:属性值2:属性2:属性值2:...:} 2.元素(标签)选择器 标签名{属性1:属性值2:属性2:属性 ...

  9. IDEA中列编辑

    快捷键 :Alt+Shift+insert,也可以按住Alt+Shift时,点击要编辑部分

  10. Vue管理系统前端系列一vue-cli4.x 初始化项目

    目录 项目介绍 技术基础 开发环境 安装工具 快速原型开发 创建项目 配置相关说明 目录结构 项目介绍 lion-ui 是一个基于 RBAC 的管理系统前端项目,采用 vue 和 element-ui ...