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 ...
随机推荐
- C# ASP 异步存储数据
1.异步委托 在导航栏接收到提交的请求后,调用个各子画面的保存答案方法,之后实例化委托 saveToDB . 当执行BeginInvoke后,服务器会另起线程执行saveToDB里的的方法,因为这里要 ...
- MySQL数据库安装,MySQL数据库库的增删改查,表的增删改查,表数据的基本数据类型
一 MySQL的安装 MySQL现在属于甲骨文公司,所以和java语言匹配度较高,同时甲骨文公司的另一种数据库为Oracle,两者同为关系型数据库,即采用关系模型来组织数据,以行和列的方法来存储数据的 ...
- ALGEBRA-3 线性映射
不求甚解 [零空间] 零空间对加法和标量乘法封闭,因此属于子空间:
- 谈谈代码评审(code review)
什么是代码评审(code review)? 根据维基百科的定义,代码评审是一种通过若干人员检阅源代码方式来进行的软件质量保证活动.根据软件工程的经典理论,代码评审应该是收益很高的活动,因其产生在Cod ...
- Go热门开源项目大全
监控系统 项目 简介 Star数 grafana/grafana Grafana 是一个用于监控指标分析和图表展示的工具, 后端支持 Graphite, InfluxDB & Promethe ...
- three.js 利用uv和ThreeBSP制作一个快递柜
最近有three网友,问我要不要学习blender,其实我感觉学习一下也无妨,不过花大量时间精通,尚可不必,术业有专攻给别人留一条路吧,哈哈.那我我们就是用ThreeBSP和uv贴图的知识来制作一个定 ...
- Scala集合操作中的几种高阶函数
Scala是函数式编程,这点在集合操作中大量体现.高阶函数,也就是能够接收另外一个函数作为参数的函数. 假如现在有一个需要是将List集合中的每个元素变为原来的两倍,现在来对比Java方式实现和Sca ...
- (转)@Autowired(required=false)注入注意的问题
1.前言 在使用spring开发过程中,我们基本上都是使用@Autowired这个注解,用来注入已有的bean.但是有些时候,会注入失败.当我们加上参数(required=false)就能解决.今天整 ...
- MySql安装后在服务管理器里边找不到MySql服务项的解决办法(win10)
问题描述: 成功安装MySql后,使用mysql的时候,在CMD中输入net start mysql,提示服务名无效,查看服务列表也找不到mysql服务. 解决办法: 首先用管理员身份打开CMD命令, ...
- DP搬运工1 [来自yyy--mengbier的预设型dp]
DP搬运工1 题目描述 给你 \(n,K\) ,求有多少个 \(1\) 到 \(n\) 的排列,满足相邻两个数的 \(max\) 的和不超过 \(K\). 输入格式 一行两个整数 \(n,K\). 输 ...