实现了登录时权限控制:进入首页、登录页以及登录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过滤器---登录权限控制的更多相关文章

  1. ASP.NET MVC使用过滤器进行权限控制

    1.新建MVC项目 2.找到Models文件夹,新建 LoginCheckFilterAttribute 类 public class LoginCheckFilterAttribute : Acti ...

  2. struts自己定义拦截器--登录权限控制

    说明:该自己定义的拦截器实现用户登录的权限控制. login.jsp--->LoginAction--重定向-->MainAction--->main.jsp 一.1.整体的步骤: ...

  3. vue路由登录拦截(vue router登录权限控制)

    实现原理: 哪些路由需要验证需要在路由文件router/index.js中指定: { path: '/', component: Home, name: 'Home', iconCls: 'fa fa ...

  4. MySQL 初学笔记 ① -- MySQL用户登录权限控制

    1. MySQL 登录 MySQL -u username -p 2. MySQL 创建用户 use mysql //进入mysql 表 INSERT INTO user (Host,User,Pas ...

  5. Spring Security 动态url权限控制(三)

    一.前言 本篇文章将讲述Spring Security 动态分配url权限,未登录权限控制,登录过后根据登录用户角色授予访问url权限 基本环境 spring-boot 2.1.8 mybatis-p ...

  6. 使用Struts 拦截namespace进行权限控制

    有时候我需要在几个包下都需要进行同一个权限控制.如在购物网站中,我们需要进入个人中心.下订单.评价商品等等都需要进行登录权限控制,但是这几个模块并不是位于同一个package下.Struts提供的拦截 ...

  7. vue后台_登录权限

    登录权限控制包含着这么几个方面的含义: 1)不同的权限对应不同的路由 2)侧边栏需要根据不同的权限,异步生成 登录:使用用户名和密码,登录成功后返回用户的token(防止XSS攻击),将此token存 ...

  8. 学习笔记_过滤器应用(粗粒度权限控制(拦截是否登录、拦截用户名admin权限))

    RBAC ->基于角色的权限控制 l  tb_user l  tb_role l  tb_userrole l  tb_menu(增.删.改.查) l  tb_rolemenu 1 说明 我们给 ...

  9. Spring+MyBatis实践—登录和权限控制

    1.实现用户登录功能: 通过session来实现用户登录功能.在用户登录时,将用户的相关信息放在HttpSession对象用,其中HttpSession对象可以通过HttpServletRequest ...

随机推荐

  1. lucene的使用与优化

    1 lucene简介1.1 什么是luceneLucene是一个全文搜索框架,而不是应用产品.因此它并不像www.baidu.com 或者google Desktop那么拿来就能用,它只是提供了一种工 ...

  2. IIS 发表web 之后,访问注册表项失败得问题

    错误: 对注册表项“HKEY_LOCAL_MACHINE\SOFTWARE\xx\xxxx\xxxxx”的访问被拒绝. 解决办法: 打开IIS,找到应用程序池,然后找到自己web使用得程序池,右键高级 ...

  3. [转]Windows 下常用盗版软件的替代免费软件列表

    当您看完这篇文章,我相信您完全可以把您 Windows 系统里安装的盗版软件清理干净而不影响您的任何工作.如果您仍然希望并且喜欢.享受做一个盗版软件用户的话,那也没有办法,但是请您记住,非常非常重要的 ...

  4. vos话务抽查小方法

    问题: 假如现在公司落地前缀主要有三个分别如下: 9150:主要用来走正规量 880:用来走正规量 660:全业务(合法) 已知: 非法业务量主要有:博彩,发票,白银,黄金,期货 合法非正规量有:保健 ...

  5. Sublime Text 3预览Markdown

    Sublime Text 3预览Markdown 安装控制器 按下按下ctrl+`出现小控制台 输入import urllib.request,os; pf = 'Package Control.su ...

  6. 探讨下在Delphi里面进程之间的数据共享

    进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动.它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元.现在小编就和大家来探讨一下在Delphi ...

  7. 2019.03.09 ZJOI2019模拟赛 解题报告

    得分: \(20+0+40=60\)(\(T1\)大暴力,\(T2\)分类讨论写挂,\(T3\)分类讨论\(40\)分) \(T1\):天空碎片 一道神仙数学题,貌似需要两次使用中国剩余定理. 反正不 ...

  8. node执行环境

    nodejs本质上是一个javascript的执行环境,只是由于他的封装,加上更多web底层的一个处理,赋予了更多的能力,那么执行环境到底是什么呢,我们到浏览器里面体验看看,在chrome里面控制台, ...

  9. OC#import和#include的异同

    1.#import和#include相同1.1都可以用在OC程序中起到导入文件的作用1.2同样的 包含系统文件都是<>,是包本地文件都用""例如:系统文件#import ...

  10. 创建Android环境并且安装cordova

    需要eclipse.Andriod SDK.java.Apache ant.Node.js.Genymotion 目录链接: 1.安装adt-eclipse 2.安装JAVA 3.安装Apache a ...