实现了登录时权限控制:进入首页、登录页以及登录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. 【QT】Qaction和触发函数建立连接的方法

    说明:我是在ui里面编辑好控件以及位置,然后在程序里面将控件和触发函数进行绑定,实现的触发操作. 代码如下: MainWindow::MainWindow(QWidget *parent) : QMa ...

  2. JUnit4 学习笔记

    一.环境搭建: 1.需要用的包: JUnit4.7:http://files.cnblogs.com/files/ShawnYang/junit4.7.zip hamcrest-1.2:http:// ...

  3. GNU Nano编辑器

    ^表示 control建 ^X 退出 nano ^O 保存文件 ^R 插入其他文件内容至光标位置 ^W 查找字符串 ^Y 跳至前一屏 ^V 跳至后一屏 ^K 剪切光标所在行并保存到剪贴板,或剪切选中内 ...

  4. Ubuntu Deb包安装<个人笔记>

    安装 删除 卸载 Deb 包文件   图形界面: 安装deb 直接双击图标,输入密码后就可自动安装. 卸载deb 1. 菜单-系统->系统管理->新立得软件包管理器 或 Alt+F2(运行 ...

  5. 323. Number of Connected Components in an Undirected Graph (leetcode)

    Given n nodes labeled from 0 to n - 1 and a list of undirected edges (each edge is a pair of nodes), ...

  6. java注解总结-关联信息-关联结构

    java的注解是一种可配置信息: 这些信息直接依附在功能代码之上: * 元注解@Target,@Retention,@Documented,@Inherited * * @Target 表示该注解用于 ...

  7. Action 语法的简介

    https://www.cnblogs.com/LipeiNet/p/4694225.html https://www.cnblogs.com/Gyoung/archive/2013/04/04/29 ...

  8. ssh框架复习

    1.Hibernate中实体类的创建规则是什么? 2.hibernate中实体类的三种状态? 三种状态: 1. new 出来一个新对象 TakeTime takeTime = new TakeTime ...

  9. Error:linker command failed with exit code 1 (use -v to see invocation) - iOS

    今天在操作 CoreData 时,创建完 Create NSManagedObject Subclass...  后,工程中会自动生成四个文件,如下图所示:   此时此刻便以工程,激动人心的时刻来临了 ...

  10. SVProgressHUD–比MBProgressHUD更好用的 iOS进度提示组件

    简介 SVProgressHUD是简单易用的显示器,用于指示一个持续进行的任务的进度. 项目主页: SVProgressHUD 最新示例: 点击下载 快速入门 安装 通过Cocoapods pod ' ...