Vue项目生成+跳转页面+跨域

本文介绍如何使用Vue.js和Vue CLI快速搭建项目,包括创建文件夹、安装依赖、配置路由及页面跳转。同时,详细讲解了通过vue-axios实现前后端分离项目的跨域访问,涉及axios安装、配置proxy代理以及接口调用示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 创建文件夹
2 cnpm install vue
3 cnpm install --global vue-cli
4 vue init webpack my-project

vs code打开

一:页面跳转

新增页面Index.vue,script里面加入name:‘Index’
router/index.js里面新增

HelloWrold页面新增
<button @click="go()">跳转首页</button>

go方法:

     			  this.$router.push({
           		   path: "/Index"
        		    });
   			 }

二:获取接口内容: 后台接口9091

vue-axios 前后端分离 跨域访问的实现

安装axios: npm install axios --save
config/index.js下面的修改为

      '/': {
        target : 'http://127.0.0.1:9091',    //设置你调用的接口域名和端口号.别忘了加http
        changeOrigin : true,   //允许跨域
        pathRewrite : {
             '^/':''
            // '/'这里理解成用‘/api’代替target里面的地址,后面组件中我们掉接口时直接用api代替。比如我要调用'http://api.douban.com/v2/movie/top250',直接写‘/api/v2/movie/top250’即可

         }
   }

vue页面方法调用

     var data={
     workId:"5594",
     coid:"6052"
     } 
     this.$axios.post('/login/updateCompany',data)
       .then((res) => {
         console.log(res.data)
         // 这里要强调一下这个this 箭头函数指的是它的父级也就是vue实例  然后不用箭头函数的话 this是一个undefined 无法.movieArr来给他赋值  这里要注意一下 我被坑了半天 希望小伙伴不要被坑
       })
       .catch(
         err => {
         console.log(err);
       }
       )

   }
<think>嗯,用户问的是怎么用Vue、Spring Boot和JWT实现用户登录。首先,我需要确认自己对这三个技术的理解是否正确。Vue前端框架,负责用户界面和交互;Spring Boot是后端框架,处理业务逻辑和数据;JWT是用于身份验证的令牌机制,替代传统的Session。 首先,得明确整个登录流程。用户在前端输入账号密码,Vue发送POST请求到Spring Boot后端。后端验证用户信息,如果正确,生成JWT返回给前端前端存储这个Token,之后的请求都带上它,后端验证Token的有效性。 接下来,我需要分步骤考虑前后端的实现。前端部分,需要创建登录表单,处理输入,发送请求,保存Token到本地存储,比如localStorage或者Vuex。然后每次请求需要在HTTP头带上Authorization字段,值为Bearer加上Token。 后端部分,Spring Boot需要配置安全机制,可能用Spring Security。需要处理用户验证,生成JWT,以及验证请求中的JWT。这里可能需要引入JWT库,比如jjwt。还要设置安全配置,放行登录接口,其他接口需要认证。 可能会遇到的问题包括请求,需要后端配置CORS。Token的过期时间设置,刷新Token的机制,以及安全性问题,比如HTTPS的使用,Token存储的安全性。 需要详细说明每个步骤的具体实现,比如前端如何发送请求,如何处理响应,保存Token。后端如何生成Token,如何验证,如何集成Spring Security。可能需要代码示例,比如登录接口的Controller,JWT工具类,安全配置类。 还要考虑错误处理,比如用户密码错误,后端返回401,前端如何提示。Token过期后的处理,是否需要刷新Token或者重新登录。 另外,需要确保JWT的签名密钥足够安全,存储在配置文件中,不要硬编码。可能还需要处理用户权限,把角色信息放到JWT里,后端根据角色进行授权。 总结下来,步骤大致是:搭建Vue前端,创建登录页面和请求;搭建Spring Boot后端,集成Spring Security和JWT;实现登录接口生成Token;前端保存Token并在后续请求中使用;后端验证Token的有效性。 需要检查是否有遗漏的部分,比如密码加密存储,用户实体类的设计,数据库交互部分。可能还需要提到使用Spring Data JPA或者MyBatis进行用户查询。 最后,确保整个流程安全可靠,比如使用BCrypt加密密码,防止SQL注入,XSS攻击等。可能还需要补充一些最佳实践,比如设置合理的Token过期时间,使用HttpOnly的Cookie存储Token是否更安全等。</think>好的,我将分步骤为您讲解如何基于 Vue + Spring Boot + JWT 实现用户登录方案,以下是具体实现流程: --- ### 一、技术架构图 ``` 前端Vue) │ 发送登录请求 ↓ 携带JWT 后端(Spring Boot) │ 生成/验证JWT ↓ 用户鉴权 数据库(用户表) ``` --- ### 二、前端实现(Vue) #### 1. 安装依赖 ```bash npm install axios vue-router vuex ``` #### 2. 登录组件逻辑 ```vue <template> <form @submit.prevent="handleLogin"> <input v-model="username" type="text"> <input v-model="password" type="password"> <button>登录</button> </form> </template> <script> import axios from 'axios'; export default { data() { return { username: '', password: '' } }, methods: { async handleLogin() { try { const res = await axios.post('/api/login', { username: this.username, password: this.password }); localStorage.setItem('jwt', res.data.token); // 存储Token this.$router.push('/dashboard'); // 跳转页面 } catch (error) { alert('登录失败'); } } } } </script> ``` --- ### 三、后端实现(Spring Boot) #### 1. 添加依赖(pom.xml) ```xml <dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt-api</artifactId> <version>0.11.5</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> ``` #### 2. JWT工具类 ```java import io.jsonwebtoken.*; import java.util.Date; public class JwtUtils { private static final String SECRET_KEY = "your-256-bit-secret"; private static final long EXPIRATION = 86400000; // 24小时 public static String generateToken(String username) { return Jwts.builder() .setSubject(username) .setExpiration(new Date(System.currentTimeMillis() + EXPIRATION)) .signWith(SignatureAlgorithm.HS256, SECRET_KEY) .compact(); } public static String validateToken(String token) { return Jwts.parser() .setSigningKey(SECRET_KEY) .parseClaimsJws(token) .getBody() .getSubject(); } } ``` #### 3. 登录接口(Controller) ```java @RestController public class AuthController { @Autowired private UserDetailsService userDetailsService; @PostMapping("/api/login") public ResponseEntity<?> login(@RequestBody LoginRequest request) { // 1. 验证用户凭证 UserDetails user = userDetailsService.loadUserByUsername(request.getUsername()); if (!passwordEncoder.matches(request.getPassword(), user.getPassword())) { throw new BadCredentialsException("密码错误"); } // 2. 生成JWT String token = JwtUtils.generateToken(user.getUsername()); return ResponseEntity.ok().body(Map.of("token", token)); } } ``` --- ### 四、安全配置(Spring Security) ```java @Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http .cors().and().csrf().disable() .authorizeRequests() .antMatchers("/api/login").permitAll() .anyRequest().authenticated() .and() .addFilterBefore(new JwtFilter(), UsernamePasswordAuthenticationFilter.class); } } // JWT验证过滤器 class JwtFilter extends OncePerRequestFilter { @Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws IOException, ServletException { String token = request.getHeader("Authorization"); if (token != null && token.startsWith("Bearer ")) { String jwt = token.substring(7); String username = JwtUtils.validateToken(jwt); // 设置SecurityContext UsernamePasswordAuthenticationToken auth = new UsernamePasswordAuthenticationToken( username, null, AuthorityUtils.NO_AUTHORITIES); SecurityContextHolder.getContext().setAuthentication(auth); } chain.doFilter(request, response); } } ``` --- ### 五、关键注意事项 1. **安全存储**:使用`HttpOnly` Cookie存储JWT比localStorage更安全 2. **密钥管理**:生产环境需将SECRET_KEY存储在配置中心(如Spring Cloud Config) 3. **处理**:通过`@CrossOrigin`或Nginx配置CORS 4. **密码加密**:必须使用BCrypt加密存储用户密码 5. **Token刷新**:可添加`/api/refresh`接口,使用refresh token机制 --- ### 六、完整流程验证 1. 用户访问前端登录页 2. 提交表单触发POST /api/login 3. 后端验证用户并生成JWT 4. 前端存储Token并携带在后续请求的Header中 5. 后端通过过滤器验证每个请求的Token有效性 通过这个方案,您可以实现一个符合现代Web应用标准的身份认证系统。需要根据实际业务需求补充权限控制(RBAC)、日志记录等模块。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值