首页 > 其他分享 >拦截器应用举例之权限拦截器

拦截器应用举例之权限拦截器

时间:2023-06-09 12:31:53浏览次数:27  
标签:session 拦截器 登录 访问 举例 jsp import 权限

1. 项目需求  68

只有经过登录的用户方可访问处理器,否则,将返回“无权访问”提示。本例的登录,由一个 JSP 页面完成。即在该页面里将用户信息放入 session 中。也就是说,只要访问过该页面,就说明登录了。没访问过,则为未登录用户。

2. 项目实现  68

使用拦截器检查登录的用户是不是能访问系统

1.新建maven

2.修改web.xml注册中央调度器  68

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee 
         http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">

    <servlet>
        <servlet-name>myweb</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

        <!--自定义springmvc读取的配置文件的位置   4-->
        <init-param>
            <!--springmvc的配置文件的位置的属性-->
            <param-name>contextConfigLocation</param-name>
            <!--指定自定义文件的位置-->
            <param-value>classpath:springmvc.xml</param-value>
        </init-param>
        <!--在tomcat启动后,创建Servlet对象
           load-on-startup:表示tomcat启动后创建对象的顺序。它的值是整数,数值越小,
                           tomcat创建对象的时间越早。 大于等于0的整数。
       -->
        <load-on-startup>1</load-on-startup>
    </servlet>
    
    <servlet-mapping>
        <servlet-name>myweb</servlet-name>
        <!--
            使用框架的时候, url-pattern可以使用两种值    5
            1. 使用扩展名方式, 语法 *.xxxx , xxxx是自定义的扩展名
               常用的方式 *.do, *.action, *.mvc等等
               http://localhost:8080/myweb/some.do
               http://localhost:8080/myweb/other.do
               不能使用 *.jsp
            2.使用斜杠 "/"
        -->
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>


</web-app>

3.新建index.jsp发起请求  68

index.jsp

<%--登录权限验证  68--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
    String basePath = request.getScheme() + "://" +
            request.getServerName() + ":" + request.getServerPort() +
            request.getContextPath() + "/";
%>
<html>
<head>
    <title>Title</title>
    <base href="<%=basePath%>" />
</head>
<body>

<p>多个拦截器</p>
<form action="some.do" method="post">
    姓名:<input type="text" name="name"> <br/>
    年龄:<input type="text" name="age"> <br/>
    <input type="submit" value="提交请求">
</form>


</body>
</html>

4.创建MyController处理请求

MyController

package com.bjpowernode.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

/**
 * 登录权限验证  68
 */
@Controller
public class MyController {


    @RequestMapping(value = "/some.do")
    public ModelAndView doSome(String name,Integer age){
        System.out.println(" =====执行MyController中的doSome方法=====");
        //处理some.do请求了。 相当于service调用处理完成了。
        ModelAndView mv  = new ModelAndView();

        mv.addObject("myname",name);
        mv.addObject("myage",age);
        mv.setViewName("show");
        return mv;
    }

}

5.创建结果  68

show.jsp

<%--登录权限验证  68--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <h3>/WEB-INF/view/show.jsp从request作用域中获取数据</h3><br>
<%--    展示数据   --%>
    <h3>myname数据:${myname}</h3><br>  <%--这里使用El表达式--%>
    <h3>myage数据:${myage}</h3>
</body>
</html>

6. 模拟登录   69

创建一个login.jsp,模拟登录(把用户的信息放入到session)

创建一个jsp, logout.jsp,模拟退出系统(从session中删除数据)

login.jsp

<%--模拟登录  69--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    模拟登录,zs登录系统
    <%
        session.setAttribute("name","zs");
    %>
</body>
</html>

logout.jsp

<%--模拟退出登录  69--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
   退出系统,从session中删除数据
  <%
      session.removeAttribute("name");
  %>
</body>
</html>

7.创建拦截器,从session中获取用户的登录数据,验证能否访问系统  69

MyInterceptor

package com.bjpowernode.handler;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Date;

//多个拦截器的执行  69
public class MyInterceptor implements HandlerInterceptor {

    //验证登陆的用户信息,正确return true 其他return false
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("拦截器MyInterceptor的preHandle()执行");
        String loginName = "";
        Object attr = request.getSession().getAttribute("name");
        //如果session中得到的name不为空,则把name赋值给loginName
        if(attr!=null){
            loginName=(String)attr;
        }
        
        //name为空证明用户没有登陆过(我们这里只设置zs能登录)
        //判断登录的账户,是否符合要求   69
        if( !"zs".equals(loginName)){
            //不能访问系统
            //给用户提示
            request.getRequestDispatcher("/tips.jsp").forward(request,response);
            return false;
        }
        //zs登录
        return true;
        
    }

}

8.创建一个验证的jsp,如果验证视图,给出提示  68

tips.jsp

<%--登录被拦截  68--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
  tips.jsp  非zs不能访问系统
</body>
</html>

9.创建springmvc配置文件  68

  声明组件扫描器

  声明拦截器

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/context
       https://www.springframework.org/schema/context/spring-context.xsd
       http://www.springframework.org/schema/mvc
       https://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <!--声明组件扫描器  8-->
    <context:component-scan base-package="com.bjpowernode.controller" />

    <!--声明 springmvc框架中的视图解析器, 帮助开发人员设置视图文件的路径   40-->
    <bean  class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!--前缀:视图文件的路径-->
        <property name="prefix" value="/WEB-INF/view/" />
        <!--后缀:视图文件的扩展名-->
        <property name="suffix" value=".jsp" />
    </bean>

    <!--声明拦截器:模拟 登陆权限验证  68
    -->
    <mvc:interceptors>
        <!--声明第一个拦截器-->
        <mvc:interceptor>
            <mvc:mapping path="/**"/>
            <!--声明拦截器对象-->
            <bean class="com.bjpowernode.handler.MyInterceptor" />
        </mvc:interceptor>
        
    </mvc:interceptors>

</beans>

测试

先访问 login.jsp,进行用户登录 http://localhost:8080/ch12_interceptor_permission/login.jsp

拦截器应用举例之权限拦截器_xml

然后在提交请求

拦截器应用举例之权限拦截器_html_02

结果

拦截器应用举例之权限拦截器_拦截器应用举例_03

在访问退出登录http://localhost:8080/ch12_interceptor_permission/logout.jsp

拦截器应用举例之权限拦截器_xml_04

然后在次提交请求

拦截器应用举例之权限拦截器_xml_05

结果

拦截器应用举例之权限拦截器_xml_06

标签:session,拦截器,登录,访问,举例,jsp,import,权限
From: https://blog.51cto.com/u_15784725/6446762

相关文章

  • Uniapp获取手机存储权限
    //判断有没有存储权限qxcz(){var_this=thisplus.android.requestPermissions(['android.permission.WRITE_EXTERNAL_STORAGE'],function(e){if(e.deniedAlways.length>0){//权限被永久拒绝......
  • uniapp安卓权限配置说明
    UNI-APP打包app权限配置里面涉及到定位,NFC,相册,语音,指纹,人脸等权限名称描述android.permission.ACCESS_CHECKIN_PROPERTIES访问登记属性读取或写入登记check-in数据库属性表的权限android.permission.ACCESS_COARSE_LOCATION获取错略位置通过WiFi或移动基站的......
  • 1 asn.1 编码和工具(多找) 2 BER和DER编码 (openssl应用举例)
    asn.1编码和工具(多找)BER和DER编码(openssl应用举例)asn.1编码和工具在ASN.1编码方面,有许多工具可供使用,例如OpenSSL、GnuTLS、Wireshark等。这些工具可以用于生成ASN.1描述的数据结构、将ASN.1数据结构编码成二进制格式、解码ASN.1数据结构等。此外,还有一些专门用于ASN.1编......
  • 3. 密码算法和密码消息的ASN.1描述(openssl应用举例)
    密码算法和密码消息的ASN.1描述(openssl应用举例)目录密码算法的描述密码算法的ASN.1格式密码算法的OID密码消息的描述密码消息的ASN.1描述通用内容消息的格式Data的格式SignedData的格式SignerInfo的格式EnvelopedData的格式SignedAndEnvelopeDdata的格式Dige......
  • 用Edge浏览器去除pdf编辑权限
    通过知网下载的硕博论文pdf默认是不允许批注编辑的,也不想安装各种破权限的软件或者在线工具(没网不就不行了,而且大多都有文档大小限制),所以找到了其他人提供的方法,就是直接将论文pdf拖到edge浏览器,然后点击另存为pdf就行。但是该方法会将原有的章节书签给删除,可以尝试其他办法解......
  • 【linux】循序渐进学运维-基础篇-文件权限管理
    写在前面:博主是一名投身教培事业的标准八零后,叛逆而且追求自由,昵称取自于苏轼的《水调歌头》中的“高处不胜寒”,时刻提醒自己要耐得住寂寞,受的了孤独,在技术的道路上,不畏艰难,勇往直前。欢迎star,投稿,交流,后续还会有python系列和java系列。文章目录权限的基础概念权限管理命令1)chmod......
  • 转载:基于表达式的权限控制
          springSecurity允许我们在定义URL访问或方法访问所应有的权限时使用SpringEL表达式,在定义所需的访问权限时如果对应的表达式返回结果为true则表示拥有对应的权限,反之则无。SpringSecurity可用表达式对象的基类是SecurityExpressionRoot,其为我们提供了如下在使用Spr......
  • 关于U8权限分配:记录级、字段级
    1.记录级,针对单一记录,如客户档案,可授权某一用户查看那些记录,比如表单中的行。如下面仓库则是仓库那些仓库允许谁查看,那些不允许谁醒看操作,用户:则是那些用户对应用户创建那些表单记录有权,那些记录没权。 2.字段级,针对业务对象的字段进行控制,如采购订单中的单价,金额字段。 3......
  • 新的权限模型Matrix data access structure介绍
    这是我的第494篇原创文章,写于2023年6月8日。2021年11月2日,PowerApps博客的博文 AnnouncingPublicPreviewformodernizebusinessunits 宣布了ModernizedBusinessUnits开启Publicpreview阶段,到本文写作时,这个Feature已经GeneralAvailable了。相关功能介绍请参考官方文档......
  • jenkins~权限控制
    jenkins上管理的任务比较多,这时需要有一定的权限管控机制,我们选择了插件Role-basedAuthorizationStrategy来做这事,它支持按着项目前缀去控制你的任务,主要思想还是rbac的模式,通过角色绑定权限,通过用户来绑定角色。安装之后配置中心通过jenkinsDashboard>ManageandAssign......