Servlet过滤器---登录权限控制
实现了登录时权限控制:进入首页、登录页以及登录servlet时,不用验证权限;进入其它页面时,须验证是否登录,未登录则跳转到登录页。
一个简单的首页:index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>首页</title>
</head>
<body>
首页
<br/>
<br/>
<a href="<%= request.getContextPath() %>/17/hello.jsp">hello.jsp</a><br/> <%
String flag = "";
Object object = session.getAttribute("flag");
if(object != null) {
flag = object.toString();
}
if(flag.equals("login_success")) {
%>
<a href="<%= request.getContextPath() %>/LogoutServlet">退出</a>
<%
} else {
%>
<a href="<%= request.getContextPath() %>/17/login.jsp">登录</a><br/>
<%
}
%>
</body>
</html>
首页中的holle.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<%!
String str = "hello world";
%>
<%
out.print(str);
%>
<br/>
<a href="<%= request.getContextPath() %>/17/index.jsp">首页</a>
</body>
</html>
首页中登录页面:login.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>用户登录</title>
<script type="text/javascript">
function check(form) {
if(document.forms.loginForm.userName.value==""){
alert("请输入用户名");
document.forms.loginForm.userName.focus();
return false;
} else if (document.forms.loginForm.password.value==""){
alert("请输入用户密码");
document.forms.loginForm.password.focus();
return false;
}
}
</script>
</head>
<body>
<form action="<%= request.getContextPath() %>/LoginServlet" method="post" name="loginForm">
<%
if(request.getAttribute("return_uri") != null) {
%>
<input type="hidden" name="return_uri" value="<%= request.getAttribute("return_uri") %>" />
<%
}
%>
用户名:<input type="text" name = "userName" />
密码:<input type="password" name = "password" />
<input type="submit" value="提交" onclick="return check(this);"/>
<input type="reset" value="重置" />
</form>
<%
if(request.getAttribute("msg")!=null && !request.getAttribute("msg").toString().equals("")){
out.print(request.getAttribute("msg"));
}
%>
</body>
</html>
登录servlet:LoginServlet.java
package com.stydt.servlet; import java.io.IOException; import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; public class LoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L; public LoginServlet() {
super();
} protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
} protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String userName = request.getParameter("userName");
String password = request.getParameter("password");
// 访问登录页面之前所访问的页面,可通过这个值跳转至之前的页面
String returnUri = request.getParameter("return_uri");
RequestDispatcher rd = null;
if (userName == null || password == null) {
request.setAttribute("msg", "用户名或密码为空");
} else {
if (userName.equals("stydt") && password.equals("123456")) {
/* 登录成功 */
// 将登录状态保存到session对象中
request.getSession().setAttribute("flag", "login_success");
/* 判断登录之前的上一个页面是否存在 */
if (returnUri != null) {
// 存在则跳转到登录之前的界面
rd = request.getRequestDispatcher(returnUri);
rd.forward(request, response);
} else {
// 不存在则跳转到首页
rd = request.getRequestDispatcher("/17/index.jsp");
rd.forward(request, response);
}
} else {
/* 登录失败 */
// 将登录状态修改为失败
request.getSession().setAttribute("flag", "login_error");
request.setAttribute("msg", "用户名或密码错误");
// 失败后跳转到登录界面
rd = request.getRequestDispatcher("/17/login.jsp");
rd.forward(request, response);
}
}
} }
退出servlet:LogoutServlet.java
package com.stydt.servlet; import java.io.IOException; import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; public class LogoutServlet extends HttpServlet {
private static final long serialVersionUID = 1L; public LogoutServlet() {
super();
} protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
} protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 注销session的值
request.getSession().invalidate();
// 将网页重定向到首页
response.sendRedirect(request.getContextPath() + "/17/index.jsp");
}
}
验证登录状态Filter:PemissionFilte.java
package com.stydt.filter; import java.io.IOException; import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession; public class PemissionFilter implements Filter { public PemissionFilter() {
} public void init(FilterConfig fConfig) throws ServletException {
} public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
// 将请求与响应向下转换
HttpServletResponse res = (HttpServletResponse) response;
HttpServletRequest req = (HttpServletRequest) request;
// 获得访问界面的url文件地址
String servletPath = req.getServletPath();
HttpSession session = req.getSession();
// 获取登录状态
String flag = (String) session.getAttribute("flag");
/* 判断是否是登录页、首页、登录servlet */
if (servletPath != null && (servletPath.equals("/17/login.jsp") || servletPath.equals("/17/index.jsp") || servletPath.equals("/LoginServlet"))) {
// 是则直接转发到下一组件
chain.doFilter(request, response);
} else {
// 否,则验证登录状态
if (flag != null) {
if (flag.equals("login_success")) {
// 登录成功,直接转发到下一组件
chain.doFilter(request, response);
} else {
// 登录失败,跳转到登录页,并保证当前网页的url文件路径
req.setAttribute("msg", "登录失败");
req.setAttribute("return_uri", servletPath);
RequestDispatcher rd = req.getRequestDispatcher("/17/login.jsp");
rd.forward(req, res);
}
} else {
// 未登录,跳转到登录页,并保证当前网页的url文件路径
req.setAttribute("msg", "您尚未登录,请登录");
req.setAttribute("return_uri", servletPath);
RequestDispatcher rd = req.getRequestDispatcher("/17/login.jsp");
rd.forward(req, res);
}
}
} public void destroy() {
} }
web.xml:
<servlet>
<servlet-name>loginServlet</servlet-name>
<servlet-class>com.stydt.servlet.LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>loginServlet</servlet-name>
<url-pattern>/LoginServlet</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>logoutServlet</servlet-name>
<servlet-class>com.stydt.servlet.LogoutServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>logoutServlet</servlet-name>
<url-pattern>/LogoutServlet</url-pattern>
</servlet-mapping>
<filter>
<filter-name>pemissionFilter</filter-name>
<filter-class>com.stydt.filter.PemissionFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>pemissionFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
Servlet过滤器---登录权限控制的更多相关文章
- ASP.NET MVC使用过滤器进行权限控制
1.新建MVC项目 2.找到Models文件夹,新建 LoginCheckFilterAttribute 类 public class LoginCheckFilterAttribute : Acti ...
- struts自己定义拦截器--登录权限控制
说明:该自己定义的拦截器实现用户登录的权限控制. login.jsp--->LoginAction--重定向-->MainAction--->main.jsp 一.1.整体的步骤: ...
- vue路由登录拦截(vue router登录权限控制)
实现原理: 哪些路由需要验证需要在路由文件router/index.js中指定: { path: '/', component: Home, name: 'Home', iconCls: 'fa fa ...
- MySQL 初学笔记 ① -- MySQL用户登录权限控制
1. MySQL 登录 MySQL -u username -p 2. MySQL 创建用户 use mysql //进入mysql 表 INSERT INTO user (Host,User,Pas ...
- Spring Security 动态url权限控制(三)
一.前言 本篇文章将讲述Spring Security 动态分配url权限,未登录权限控制,登录过后根据登录用户角色授予访问url权限 基本环境 spring-boot 2.1.8 mybatis-p ...
- 使用Struts 拦截namespace进行权限控制
有时候我需要在几个包下都需要进行同一个权限控制.如在购物网站中,我们需要进入个人中心.下订单.评价商品等等都需要进行登录权限控制,但是这几个模块并不是位于同一个package下.Struts提供的拦截 ...
- vue后台_登录权限
登录权限控制包含着这么几个方面的含义: 1)不同的权限对应不同的路由 2)侧边栏需要根据不同的权限,异步生成 登录:使用用户名和密码,登录成功后返回用户的token(防止XSS攻击),将此token存 ...
- 学习笔记_过滤器应用(粗粒度权限控制(拦截是否登录、拦截用户名admin权限))
RBAC ->基于角色的权限控制 l tb_user l tb_role l tb_userrole l tb_menu(增.删.改.查) l tb_rolemenu 1 说明 我们给 ...
- Spring+MyBatis实践—登录和权限控制
1.实现用户登录功能: 通过session来实现用户登录功能.在用户登录时,将用户的相关信息放在HttpSession对象用,其中HttpSession对象可以通过HttpServletRequest ...
随机推荐
- 816 Ambiguous Coordinates (many cases problem)
https://www.cnblogs.com/Java3y/p/8846955.html -- link of the problem 816 IDEA: check the dot and int ...
- oracle 创建SDO_Geometry表
Oracle Spatial由一坨的对象数据类型,类型方法,操作子,函数与过程组合而成.一个地理对象作为一个SDO_GEOMETRY对象保存在表的一个字段里.空间索引则由普通的DDL和DML语句来建立 ...
- Uva 11078 简单dp
题目链接:http://uva.onlinejudge.org/external/110/11078.pdf a[i] - a[j] 的最大值. 这个题目马毅问了我,O(n^2)超时,记忆化一下当前最 ...
- HDU(1698),线段树区间更新
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1698 区间更新重点在于懒惰标记. 当你更新的区间就是整个区间的时候,直接sum[rt] = c*(r- ...
- 调用外部EXE文件
实现效果: 知识运用: Process类的Start方法 实现代码: private void button1_Click(object sender, EventArgs e) { OpenFile ...
- openstack kilo python cinderclient
➜ ~ pythonPython 2.7.5 (default, Oct 30 2018, 23:45:53) [GCC 4.8.5 20150623 (Red Hat 4.8.5-36)] on ...
- java重定向与请求转发
重定向是不能直接访问WEB-INF下的资源的,因为重定向是浏览器二次请求,众所周知,客户端是不能直接访问WEB-INF下的资源的. 而请求转发却可以直接访问. 然而重定向却可以间接访问WEN-INF下 ...
- 多重网格方法(Multigridmethod)
原文链接 多重网格方法是解微分方程的方法.这个方法的好处是在利用迭代法收敛结果的时候速度特别快.并且,不管是否对称,是否线性都无所谓.它的值要思想是在粗糙结果和精细结果之间插值. 前面介绍了Gauss ...
- vim实用配置
"编码set encoding=utf-8"显示行号set number"语法高亮度显示syntax on "自动缩进set autoindent"t ...
- jQuery UI datepicker z-index默认为1 怎么处理
最近在维护一个后台系统的时候遇到这样的一个坑:后台系统中日期控件使用的是jQuery UI datepicker. 这个控件生成的日期选择框的z-index = 1.问题来了.页面上有不少z-inde ...