首页 > 编程语言 >Java实践项目 - 用户登录

Java实践项目 - 用户登录

时间:2023-08-02 17:35:33浏览次数:31  
标签:拦截器 Java 请求 登录 用户 session 异常

Smiling & Weeping

                    ----以花祈愿,祝你平安

 

当用户输入用户名和密码将数据提交给数据库进行查询,如果存在对应的用户名和密码,则表示登陆成功,登录成功之后跳转到系统的主页就是index.html页面,跳转在前端使用jQuery来完成

1.登录-持久层

1.1增删改--规划需要执行的SQL语句

依据用户提交的用户名和密码做select查询.密码的比较在业务层

selct * from t_user where username=?

某一个功能模块已经被开发完成了,所以可以省略当前开发,这个分析过程不能省略

1.2接口设计和抽象方法

不用重复开发。单元测试也是不需要单独执行。

2.登录-业务层

2.1规划相关异常

2.1.1.用户名对应的密码错误,密码匹配失败:PasswordNotMatchException异常,运行时异常,业务异常

2.1.2.用户名没有被找到,抛出异常:UsernameNotFoundException

2.1.3.异常的编写:

业务层异常需要继承ServiceException异常类

在具体的异常类中构造方法(可以使用快捷键)

2.2设计业务层接口和抽象方法

2.2.1直接在IUserService接口中编写抽象方法,login(String username , String password),将当前登录成功的用户数据以当前用户对象的形式进行返回。状态管理:可以将数据保存在cookie或者session中,可以避免重复度很高的数据多次频繁数据操作进行获取(用户名、用户id-存放session中 , 用户头像-cookie)

2.2.2需要在实现类中实现父接口的抽象方法。

2.2.3在测试类中测试是否可以通过

2.3抽象方法的实现

3.登录-控制层

3.1处理异常

业务层抛出的异常是什么,需要在统一异常处理类中进行统一的捕获和处理,如果也曾抛出异常类型已经在统一的异常处理类中曾经处理过,则不需要重复添加。

3.2设计请求

请求路径:/users/login

请求方式:POST

请求数据:String phone , String password

相应结果:JsonResult<User>

3.3处理请求

在UserController类中编写请求方法。

4.用户-前端登录

用户会话session

session对象主要存在服务器端,可以用于保存服务器的临时数据的对象,所保存的数据可以放在整个项目中都可以通过访问来获取,把session的数据看做一个共享数据。首次登录的时候所获取的用户的数据,转移到session对象即可。session.getAttrbute("key"),可以将获取session中的数据进行封装,封装放在BaseController

拦截器:

将所有请求统一拦截到拦截器,可以在拦截器中定义过滤的规则,如果不满足系统的过滤规则,统一的处理是重新去打开login.html页面(重定向和转发),推荐使用重定向。(重定向:发送请求url,根据服务器的返回信息重新发送新的请求URL,转发:发送url,服务器内部解析后进行新的请求,整个过程中发生在服务器内部,外部不知)

在SpringBoot项目中做拦截器的定义和使用。SpringBoot是依靠SpringMVC来完成的。SpringMVC提供了一个HandlerInterceptor接口,用于表示定义一个拦截器。首先自定义一个类,再让一个类实现一个接口。

1.自定义一个类,在这个类实现这个HandlerInterceptor接口

2.注册过滤器:添加白名单(那些资源可以在不登录的情况下访问:login.html\register.html\login\reg\index.html\product.html)、添加黑名单(在用户登录的状态才可以访问的页面资源)。

3.注册过滤器的技术:借助WebMVCConfigure接口,可以将用户定义的拦截器进行注册,才可以保证拦截器能够生效和使用。定义一个类,然后让这个类实现WebMVCConfigure接口。(配置信息,建议存放在项目的config结构下)

//将自定义的拦截器进行注册

default void addInterceptors(InterceptorRegistry registry)

4.提示重定向次数过多,login.html页面无法打开。将浏览器cookie请除,再将浏览器设置为初始设置

 

请求头传递token

前端但凡访问受限资源,都必须携带token发送请求;token可以通过请求行(params)、请求头(header)以及请求体data传递,但习惯性使用header传递

HttpServletRequest request

String token = request.getHeader("token")

axios通过请求头

当前端发送的请求携带自定义的请求头时,前端会发送一个预检请求(method=“OPTIONS”,初始值),后端需要正常响应前端,之后前端才会返回数据给后端

在拦截器中放行options请求

标签:拦截器,Java,请求,登录,用户,session,异常
From: https://www.cnblogs.com/smiling-weeping-zhr/p/17601301.html

相关文章

  • Java编程-依据类图与流程图实现对应接口
    类图依据与流程图依据封装常见的HTTP状态码RegisterController接口register(Stringname,Stringpwd)login(Stringname,Stringpwd)NovelController接口addNovel()asdfasdfasdfasdfasdfasdfasdfasdfasdfasdfNovelContentController接口asdfasdfasdfasdfasdf......
  • SSH 使用 root 权限登录 Nas
    一、启用SSH服务转到Synology设备的终端设置页面:SynologyNAS:DSM控制面板>终端机和SNMP>终端机勾选启用SSH服务。指定SSH连接的端口号并保存设置。为了确保系统安全性,建议将默认端口22替换为其他端口号。 二、sshDSM/SRM管理员帐户@DSM/SRMIP地址-pSSH......
  • 学习Java的第12天
    packageoperator;publicclassDemo04{publicstaticvoidmain(String[]args){//++--自增,自减一元运算符inta=3;intb=a++;//执行完这行代码后,先给b赋值,再自增//a=a+1System.out.println(a);//a=......
  • 2023年Java学习路线,史上最全Java学习路线-文中有送书福利
    小伙伴们大家好,这里是动力节点,我们从2009年开始一直在从事Java培训到今年已经整14年了,虽然现在不缺培训机构,更不缺Java培训,但是像我们这么多年专注这一件事的应该也不多。我们只希望在“专业”两个字上面不断精进,给每一位想学Java的同学带来更好的资源和学习规划。我们深知,有很多同......
  • idea查看java代码汇编指令
    将下列jar包放入到jre的bin目录下面   hsdis-amd64.dll指定java的jvm参数-server-Xcomp-XX:+UnlockDiagnosticVMOptions-XX:+PrintAssembly-XX:CompileCommand=compileonly,*VolitaleDemo.main运行......
  • java位运算及移位运算你还记得吗
    本文中所提到的运算都是基于整数来说的,因为只有整数(包括正数和负数)在操作系统中是以二进制的补码形式运算的,关于原码、反码、补码、位运算、移位运算的背景这里不再介绍,网上资料很多,感兴趣的可自行搜索。java中能表示整数数据类型的有byte、short、char、int、long,在计算机中占用......
  • Kotlin与Java语法对比学习
    定义变量//Kotlinvali:Int=10//定义一个整数变量vald:Double=10.0//定义一个双精度浮点数变量valb:Boolean=true//定义一个布尔变量valc:Char='a'//定义一个字符变量vals:String="Hello,World!"//定义一个字符串变量valarr:Array<I......
  • .bat实现微信多账号登录
    大多数人有多个微信账号,然而一般情况电脑同时只能登录一个微信下面利用.bat批处理脚本实现多账号登录: 1.新建一个文本文档,把尾缀修改为.bat2.右键->编辑:pausestart"""D:\app\Tencent\WeChat\WeChat.exe"start"""D:\app\Tencent\WeChat\WeChat.exe"D:\app\Te......
  • mysql添加用户并分配权限
    CREATEUSER'username'@'ip'IDENTIFIEDBY'password';GRANTprivilegesONdatabase.tableTO'username'@'ip';其中:username替换为用户名,例如“bigman”ip替换为可访问数据库的ip,例如“127.0.0.1”“192.168.1.1”,使用“%”表示不限制远程连接ippassw......
  • Java编程-目录整理、新建接口、集成mybatis plus以及数据库初始化
    数据库初始化新建对应调试库```#dockerps#dockerexec-it6d542566d077/bin/bashpostgres=#createdatabasenovel;```执行全量脚本......