Java使用Filter用户权限控制
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用户权限控制的更多相关文章
- Java成员的访问权限控制
Java中的访问权限控制包含两个部分: 类的访问权限控制 类成员的访问权限控制 对类来说,访问权限控制修饰符可以是public或者无修饰符(默认的包访问权限): 对于类成员来说,访问权限控制修饰符可以 ...
- 浅析Java中的访问权限控制
浅析Java中的访问权限控制 今天我们来一起了解一下Java语言中的访问权限控制.在讨论访问权限控制之前,先来讨论一下为何需要访问权限控制.考虑两个场景: 场景1:工程师A编写了一个类ClassA,但 ...
- linux下通过acl配置灵活目录文件权限(可用于ftp,web服务器的用户权限控制)
linux下通过acl配置灵活目录文件权限(可用于ftp,web服务器的用户权限控制) 发表于2012//07由feng linux 本身的ugo rwx的权限,对于精确的权限控制很是力不从心的,ac ...
- Vue-Access-Control:前端用户权限控制解决方案
原文地址:http://refined-x.com/2017/11/28/Vue2.0用户权限控制解决方案/ Vue-Access-Control是一套基于Vue/Vue-Router/axios 实 ...
- asp.net core根据用户权限控制页面元素的显示
asp.net core根据用户权限控制页面元素的显示 Intro 在 web 应用中我们经常需要根据用户的不同允许用户访问不同的资源,显示不同的内容,之前做了一个 AccessControlHelp ...
- Java基础之访问权限控制
Java基础之访问权限控制 四种访问权限 Java中类与成员的访问权限共有四种,其中三种有访问权限修饰词:public,protected,private. Public:权限最大,允许所有类访问,但 ...
- java filter 实现权限控制
import javax.servlet.*; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.Http ...
- 基于RESTful API 怎么设计用户权限控制?
前言 有人说,每个人都是平等的:也有人说,人生来就是不平等的:在人类社会中,并没有绝对的公平,一件事,并不是所有人都能去做:一样物,并不是所有人都能够拥有.每个人都有自己的角色,每种角色都有对某种资源 ...
- 基于RESTful API 设计用户权限控制
RESTful简述 本文是基于RESTful描述的,需要你对这个有初步的了解. RESTful是什么? Representational State Transfer,简称REST,是Roy Fiel ...
随机推荐
- 使用JSPWiki丰富Unity-UPM包的使用
1.简述 诸如npm.Nuget之类的包管理工具,Unity推出了自己的Unity Package Manager(UPM)工具来管理使用到的第三方库. 现在Unity Package Manager ...
- 【模式识别与机器学习】——4.3离散K-L变换
全称:Karhunen-Loeve变换(卡洛南-洛伊变换) 前面讨论的特征选择是在一定准则下,从n个特征中选出k个来反映原有模式. 这种简单删掉某n-k个特征的做法并不十分理想,因为一般来说,原来的n ...
- C#LeetCode刷题之#191-位1的个数(Number of 1 Bits)
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/4052 访问. 编写一个函数,输入是一个无符号整数,返回其二进制表 ...
- python设计模式之享元模式
python设计模式之享元模式 由于对象创建的开销,面向对象的系统可能会面临性能问题.性能问题通常在资源受限的嵌入式系统中出现,比如智能手机和平板电脑.大型复杂系统中也可能会出现同样的问题,因为要在其 ...
- akka-typed(10) - event-sourcing, CQRS实战
在前面的的讨论里已经介绍了CQRS读写分离模式的一些原理和在akka-typed应用中的实现方式.通过一段时间akka-typed的具体使用对一些经典akka应用的迁移升级,感觉最深的是EvenSou ...
- 机器学习:支持向量机(SVM)
SVM,称为支持向量机,曾经一度是应用最广泛的模型,它有很好的数学基础和理论基础,但是它的数学基础却比以前讲过的那些学习模型复杂很多,我一直认为它是最难推导,比神经网络的BP算法还要难懂,要想完全懂这 ...
- R 安装包的方法
install.packages(packageName) install.packages(path_to_file, repos = NULL, type="source") ...
- Spring Security 实战干货:实现自定义退出登录
文章目录 1. 前言 2. 我们使用 Spring Security 登录后都做了什么 2. 退出登录需要我们做什么 3. Spring Security 中的退出登录 3.1 LogoutFilte ...
- Go 中的内联优化
文讨论 Go 编译器是如何实现内联的以及这种优化方法如何影响你的 Go 代码. 请注意:本文重点讨论 gc,实际上是 golang.org 的 Go 编译器.讨论到的概念可以广泛用于其他 Go 编译器 ...
- 洛谷 P4284 [SHOI2014]概率充电器 概率与期望+换根DP
洛谷 P4284 [SHOI2014]概率充电器 概率与期望+换根DP 题目描述 著名的电子产品品牌\(SHOI\) 刚刚发布了引领世界潮流的下一代电子产品-- 概率充电器: "采用全新纳米 ...