Vue与SpringSecurity认证整合-06

news2024/10/24 22:25:38

         Vue与SpringSecurity整合

         我们要知道springsecurity是一个安全框架,我们在后端的时候没有接触前端,springsecurity引入依赖之后,启动项目会对我们进行拦截,让我们登录,然后我们制定了一个登录页面,也是后端的,我们可以指向我们的登录页面,但是与Vue整合之后,登录页面肯定是在Vue中,但是要如何呢?我们可以用几张图来解释

 这里就是我们当时在后端的时候,我们的登陆页面是他自己的,所以可以随便指向登录页面

问题来了,如果才能让他与Vue整合,我们是无法让后端指向前端的登录页面的,我们这样的行为被称为前后端分离项目,前后端分离,后端只需要响应数据,前端只需要传输数据就可以,我是这样想的,我们点击登录按钮的时候,在后端设置处理登录的url,然后把前端的用户名密码传输到后端处理登录的url内,我们只需要给前端响应登录成功了还是失败了就可以

 直接上代码!!!!

跨域

     首先先需要一个Vue的登录页面,这里随便使用一个form能传输数据就可以,而我们后端也是一样的,准备一个springsecurity的一个工作,这里我们以前是做过的,可以看我springboot的专栏,我们前端和后端是有同源策略的,我们上节也讲过,但是我们的登录处理路径是不存在的,在springsecurity内部

无法进行注解跨域,所以我们来解决一下

package com.xc.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;

@Configuration
public class CrosConfig {
    @Bean //方法上面
    // @Component 类上面
    public CorsFilter corsFilter(){
        // 跨域配置
        CorsConfiguration corsConfiguration = new CorsConfiguration();
        // 允许的域名
        // corsConfiguration.addAllowedOrigin("http://localhost:8080");
        corsConfiguration.addAllowedOrigin("http://localhost:8080");// * 代表所有  http://localhost:8080
        // 允许的请求头
        corsConfiguration.addAllowedHeader("*");//
        // 请求方式
        corsConfiguration.addAllowedMethod("*");// get  post put delete
        corsConfiguration.setAllowCredentials(true);
        // 允许携带凭证
        corsConfiguration.addAllowedOriginPattern("*");//

        // 基于请求路径url的跨域源配置
        UrlBasedCorsConfigurationSource urlBasedCorsConfigurationSource = new UrlBasedCorsConfigurationSource();
        // 所有的路径   都能跨域
        urlBasedCorsConfigurationSource.registerCorsConfiguration("/**",corsConfiguration);

        return new CorsFilter(urlBasedCorsConfigurationSource);
    }
}

     记住我们的security的配置,还是需要加入我们的跨域配置

    

 处理器            

        然后我们使用前端可以进行访问一下,我们后端,点击登录按钮,去提交用户名密码到后端,这里记住必须使用post请求才可以 ,这里我们使用的一个插件 qs,我们可以通过npm i qs来下载,他可以将我们的数据,以字符串拼接的方式拼接到路径后面,我们点击提交的话,后端是会给前端响应一个页面的

而我们要做的是登录成功之后给前端响应一个信息,这里我们使用了一个springsecurity的成功处理器以及失败处理器

   private void responseSuccess(HttpServletResponse response,Result result) throws 
  IOException {
        //设置编码格式
        response.setContentType("application/json;charset=utf-8");
        ObjectMapper mapper=new ObjectMapper();
        String s = mapper.writeValueAsString(result);
        PrintWriter writer = response.getWriter();
        writer.println(s);
         writer.flush();
         writer.close();
    }    
@Override
    protected void configure(HttpSecurity http) throws Exception {
        //登录成功的处理器
        http.formLogin().successHandler(new AuthenticationSuccessHandler() {
            @Override
            public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException {
                //登录成功的时候给前端传入一个通知
                responseSuccess(response,Result.success("成功"));
             }
        }).failureHandler(new AuthenticationFailureHandler() {
            @Override
            public void onAuthenticationFailure(HttpServletRequest request, HttpServletResponse response, AuthenticationException exception) throws IOException, ServletException {
                responseSuccess(response,Result.fail());
            }
        });
        // 配置登录设置
        http.formLogin().loginProcessingUrl("/mylogin").permitAll()
                .usernameParameter("username").passwordParameter("password");
        http.authorizeRequests().anyRequest().authenticated();// 除了放行之外的其他的路径全部需要认证
        // 由于我们设置的 登录是一个html页面
        http.csrf().disable();
        // 允许跨域
        http.cors();
}

当我们再次访问的时候,只会给我们响应成功还是失败,前端来进行跳转

此刻我们登录就算完成了,在springboot专栏我也写了jwt令牌进行前后端分离的

axios封装

  我们可以对axios进行封装,因为我们一直都是访问8082端口,假如有一万个8082端口,老板让改成8083端口,难道要改一万次吗

  这里我们为什么要使用凭证呢,我们的后端是不认识我们的,虽然第一次登录你登录成功了,但是你每次都要带着你的密码和用户登录,因为你登录一次之后还是不认识你

 axios的响应拦截器,比请求的响应还要早一点,这里可以对数据进行过滤

import axios from 'axios'
let http=axios.create(
   {
	   baseURL:"http://localhost:8082/",
	   // `withCredentials` 表示跨域请求时是否需要使用凭证
	    withCredentials: true // default
   }
 )
 // 添加响应拦截器
 http.interceptors.response.use((response)=> {
     // 2xx 范围内的状态码都会触发该函数。
     // 对响应数据做点什么
	 let data = response.data
		return data
	
     //return response;
   }, function (error) {
     // 超出 2xx 范围的状态码都会触发该函数。
     // 对响应错误做点什么
     return Promise.reject(error);
   });
 export default http

 我们把http导出之后,需要定义成全局的常量让我们使用

  $http就是http,并且是全局的变量

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1842726.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【JavaScript复习二】选择结构if和Switch(1)

### []( )2、单分支条件分支语句if (条件表达式) { // 条件为真时,做的事情 } else { // 条件为假时,做的事情 } ### []( )2,、多分支的 if 语句if (条件表达式1) { // 条件1为真时,做的事情} else if (条件表达式2) { // 条件1不满足&…

打造完美启动页:关键策略与设计技巧

启动页(Splash Screen)设计是指在应用程序启动时,首先展示给用户的界面设计。这个界面通常在应用加载或初始化期间显示,其主要目的是为用户提供一个视觉缓冲,展示品牌标识,并减少用户在等待过程中的焦虑感。…

kafka基础概念

目录 1、kafka简介 2、kafka使用场景 3、kafka基础概念 3.1、消息 3.1.1、消息构成详解 3.1.2、消息存储设计 3.2、topic 3.3、partition 3.4、offset 3.5、replication 3.5.1、replication简介 3.5.2、副本角色 3.5.3、副本类型 3.5.3.1、副本类型简介 3.5.3.2、…

【前端开发工具】VS Code安装和使用

文章目录 一、前言二、下载三、安装四、配置五、使用5.1 导入项目5.2 本地运行项目5.3 修改界面文案,验证效果5.4 添加日志打印5.5 代码调试5.6 代码提交到Git仓库 六、总结 一、前言 本文介绍一下在前端vue项目中,VS Code的安装和配置。 什么是VS Code…

最新版本的MathType软件2024最新和谐绿色版下载

🌟 数学公式的美学,MathType全新升级! 亲爱的笔记本小达人,你是否曾为在文档中插入美观又准确的数学公式而头疼?今天,我就来给你种草一个神奇的工具 —— 最新版本的MathType软件!&#x1f389…

React Native性能优化红宝书

一、React Native介绍 React Native 是Facebook在React.js Conf2015 推出的开源框架,使用React和应用平台的原生功能来构建 Android 和 iOS 应用。通过 React Native,可以使用 JavaScript 来访问移动平台的 API,使用 React 组件来描述 UI 的…

PhotoShop自动生成号码牌文件

1、说明 设计卡牌的时候,遇到自动生成编号,从01500到-02500,一个一个的手写,在存储保存成psd格式的文件,会很耗时。 下面将介绍如何使用ps自动生成psd格式的文件 2、使用excle生成数字 从01500到-02500 第一步&…

华为---VLAN-配置Eth-Trunk链路聚合(三)

6.3 配置Eth-Trunk链路聚合 6.3.1 原理概述 在没有使用Eth-Trunk前,百兆以太网的双绞线在两个互连的网络设备间的带宽仅为100Mbit/s。若想达到更高的数据传输速率,则需要更换传输媒介,使用千兆光纤或升级成为千兆以太网。这样的解决方案成本…

浙江农林大学2024年成人高等继续教育招生简章

浙江农林大学,作为浙江省内享有盛誉的高等学府,一直以其深厚的学术底蕴和严谨的教学态度为广大学子所赞誉。近年来,随着社会对高素质、专业化人才的需求日益增长,成人高等继续教育逐渐成为越来越多人提升自身综合素质、拓宽职业发…

Mybatis save、saveOrUpdate、update的区别

哈喽,大家好,我是木头左! 1. save方法 Mybatis的save方法用于插入一条新的记录。当数据库中不存在相同的记录时,会执行插入操作;如果已经存在相同的记录,则会抛出异常。 int result sqlSession.insert(&…

SAP 接口-联行号主数据维护接口【MDM->SAP】开发说明书(包括测试样例、程序代码仅作参考,不保证一定可以运行)

接口映射字段 开发通用说明 根据接口传输字段【MDMWHLX 维护类型】=0则调用联行号创建【BAPI_BANK_CREATE】【前台事务码FI01】对联行号进行创建; 根据接口传输字段【MDMWHLX 维护类型】=1时则调用联行号修改【BAPI_BANK_CREATE】【前台事务码FI02】对联行号进行修改; 开发…

易优CMS网站如何打包备份(搬家教程)

易优CMS网站如何打包备份(搬家教程) 1. 搬家前备份数据库 2.删除install_********目录下的install.lock文件 3.再改名install_1540256968 为install 4.删除data untime所有文件夹 5.打包根目录下所有文件,上传空间解压即可安装 注:安装后直接进入后台…

视频二维码怎么设置全屏播放?默认全屏效果的添加技巧

视频做成二维码如何全屏展示呢?现在很多人都会将视频生成二维码后,分享二维码给其他人来扫码查看视频内容,设置视频默认全屏播放可以带来展示更好的效果,那么横版和竖版视频扫码自动全屏播放是如何生成的呢? 视频二维…

嵌入式开发者转战AI大模型,是机遇还是挑战?

前言 在当今日新月异的科技浪潮中,人工智能(AI)大模型无疑是技术前沿的明星领域,它们以其卓越的性能和广泛的应用前景,吸引了全球范围内的关注。对于嵌入式开发者而言,从熟悉的硬件嵌入式领域转战AI大模型…

【专利】一种光伏加工产品缺陷检测方法

申请号CN202410053862.4公开号(公开)CN118037635A申请日2024.01.12申请人(公开)超音速人工智能科技股份有限公司发明人(公开)张俊峰(总); 叶长春(总); 许春夏 摘要 本发明公开一种光伏加工产品缺陷检测方…

今天碰到一个gitee的严重问题

今天碰到一个gitee的严重问题 今天访问gitee的官网,无法访问… 代码无法提交 接下来 接下来 gitee的客服给我说 不知道哪天会不会代码直接没了 不知道哪天会不会代码直接没了

高效电商数据分析:电商爬虫API与大数据技术的融合应用

一、引言 随着电子商务的迅猛发展和数据量的爆炸式增长,电商数据分析已成为企业决策的关键依据。在竞争激烈的电商市场中,如何高效、准确地获取并分析数据,以洞察市场趋势、优化运营策略、提升用户体验,成为电商企业面临的重要挑…

【机器学习】Transformer框架理论详解和代码实现

1. 引言 1.1.讨论背景 在本文中,我们将深入探讨近两年最具影响力的架构之一:Transformer模型。自从2017年Vaswani等人发表划时代论文《Attention Is All You Need》以来,Transformer架构便在众多领域,尤其是自然语言处理&#x…

中欧科学家论坛暨第六届人工智能与先进制造国际会议(AIAM2024)

会议日期:2024年10月20-21日 会议地点:德国-法兰克福 会议官网:https://www.iaast.cn/meet/home/Bx130JiM 出版检索:EI、Scopus等数据库收录 【会议简介】 “中欧科学家论坛”由德国、法国、荷兰、瑞士、丹麦、意大利、西班牙…

golang去掉前后空格

str : " ce s "str strings.TrimSpace(str)fmt.Printf("--%v--", str)