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. JDBC的开发步骤

    一.JDBC概述 JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问, 它由一组用Jav ...

  2. 2020-05-18:MYSQL为什么用B+树做索引结构?平时过程中怎么加的索引?

    福哥答案2020-05-18:此答案来自群员:因为4.0成型那个年代,B树体系大量用于文件存储系统,甚至当年的Longhorn的winFS都是基于b树做索引,开源而且好用的也就这么个体系了.B+树的磁 ...

  3. C#设计模式之20-状态模式

    状态模式(State Pattern) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/425 访问. 状态模式属于行为型 ...

  4. Eclipse怎么调整字体大小和主题

    调整字体 哈哈哈哈哈 ( ̄▽ ̄),直接Ctrl + -/+号,....在英文输入法状态. 或者,你想更细致的调整字体类型,可以在Winodw -> Preferences中调整: 换主题 你可以 ...

  5. Vulnhub篇Photographerr

    0x00 靶机信息 靶机:Photographerr:1 难度:中 下载:https://www.vulnhub.com/entry/photographer-1,519/ 0x01 信息收集 靶场网 ...

  6. day11面向对象 多态 静态方法 (三)

    多继承 class 类名(父类1,父类2)  ----- 默认使用第一个父类   重写父类方法 方法名和父类方法名一样 当父类和子类的方法名重名时,默认使用的是子类中的方法     调用被重写的父类的 ...

  7. python 判断文件和文件夹是否存在、创建文件夹

    原文链接:https://www.cnblogs.com/hushaojun/p/4533241.html >>> import os >>> os.path.ex ...

  8. cinderclient命令行源码解析

    一.简介 openstack的各个模块中,都有相应的客户端模块实现,其作用是为用户访问具体模块提供了接口,并且也作为模块之间相互访问的途径.Cinder也一样,有着自己的cinder-client. ...

  9. 如何配置 SSH 密钥连接 Git 仓库

    SSH 是 Secure Shell 的缩写,由 IETF 的网络小组(Network Working Group)所制定:是建立在应用层基础上的安全协议. SSH 是目前较可靠,专为远程登录会话和其 ...

  10. 操作系统-I/O(3)SPOOLing技术

    为了缓和CPU的高速性与I/O设备低速性间的矛盾而引入了脱机输入.输出技术.该技术是利用专门的外围控制机,将低速I/O设备上的数据传送到高速磁盘上:或者相反. 事实上,当系统中引入了多道程序技术后,完 ...