实现了登录时权限控制:进入首页、登录页以及登录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. 自定义 Firefox TLS支持版本s

    如果目前正在运行火狐26,你可能已经注意到,浏览器仅支持SSL 3.0和TLS 1.0,默认不开启TLS 1.1或TLS 1.2.另外我们知道Firefox 27 已经实现了对TLS 1.2的支持. ...

  2. 修改jupyter notebook的工作路径

    两种方法 一 修改jupyter notebook快捷方式的属性 ①根据下图找到jupyter的快捷方式:jupyter notebook→更多→打开文件位置 ②右键打开属性-将目标一栏中最后的%US ...

  3. Cmake 01

    1. sdsf(single direction single file) 1.1  The directory tree /* ./template | +--- build | +---main. ...

  4. Android(java)学习笔记64:Android权限大全

    访问登记属性 android.permission.ACCESS_CHECKIN_PROPERTIES读取或写入登记check-in数据库属性表的权限 获取错略位置 android.permissio ...

  5. 百度Ueditor 图片上传无反应,显示上传0张,不能点确定

    解决办法: \Data\Ueditor\php\Uploader.class.php 190行左右 /** * 获取文件扩展名 * @return string */ private function ...

  6. 剑指offer 和为s的两个数字的调试

    这是整个调试, for (int i:s) cout<<i<<endl;这句话是c++11特性下的一种遍历方式 在编译的时候需要加-std=c++11,即g++ 41.cpp ...

  7. fluent Python

    1.1 Python风格的纸牌 Python collections模块中的内置模块:namedtuple https://www.liaoxuefeng.com/wiki/0013747381250 ...

  8. C#中类的成员

    一.C#中类的成员 1. 类的成员 类中的数据和函数都称为类的成员.类的成员可以分为两类: ?类本身所声明的. ?从基类中继承来的. 如果在类声明中没有指定基类,则该类将继承System.Object ...

  9. Spring 框架配置web.xml 整合web struts

    package cn.itcast.e_web; import java.io.IOException; import javax.servlet.ServletContext; import jav ...

  10. jquery 操作ajax 相关方法

    jQuery.get() 使用一个HTTP GET 请求从服务器加载数据. jQuery.get(url [,data] [,success(data,textStatus,jqXHR)] [dtaT ...