vue实现java登录注册
实现 Vue 与 Java 后端的登录注册功能
前端 Vue 部分
安装必要的依赖(如 axios 用于 HTTP 请求):
npm install axios
创建登录表单组件(Login.vue):
<template>
<div>
<input v-model="username" placeholder="用户名">
<input v-model="password" type="password" placeholder="密码">
<button @click="login">登录</button>
</div>
</template>
<script>
import axios from 'axios';
export default {
data() {
return {
username: '',
password: ''
};
},
methods: {
login() {
axios.post('http://localhost:8080/api/login', {
username: this.username,
password: this.password
}).then(response => {
localStorage.setItem('token', response.data.token);
this.$router.push('/dashboard');
}).catch(error => {
console.error(error);
});
}
}
};
</script>
创建注册表单组件(Register.vue):
<template>
<div>
<input v-model="username" placeholder="用户名">
<input v-model="password" type="password" placeholder="密码">
<input v-model="email" type="email" placeholder="邮箱">
<button @click="register">注册</button>
</div>
</template>
<script>
import axios from 'axios';
export default {
data() {
return {
username: '',
password: '',
email: ''
};
},
methods: {
register() {
axios.post('http://localhost:8080/api/register', {
username: this.username,
password: this.password,
email: this.email
}).then(() => {
this.$router.push('/login');
}).catch(error => {
console.error(error);
});
}
}
};
</script>
后端 Java 部分(Spring Boot)
创建 Spring Boot 项目并添加依赖(pom.xml):
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.1</version>
</dependency>
</dependencies>
创建用户实体类:
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String username;
private String password;
private String email;
// getters and setters
}
创建认证控制器:
@RestController
@RequestMapping("/api")
public class AuthController {
@Autowired
private UserRepository userRepository;
@Autowired
private PasswordEncoder passwordEncoder;
@Autowired
private JwtTokenProvider tokenProvider;
@PostMapping("/login")
public ResponseEntity<?> authenticateUser(@RequestBody LoginRequest loginRequest) {
Authentication authentication = authenticationManager.authenticate(
new UsernamePasswordAuthenticationToken(
loginRequest.getUsername(),
loginRequest.getPassword()
)
);
SecurityContextHolder.getContext().setAuthentication(authentication);
String jwt = tokenProvider.generateToken(authentication);
return ResponseEntity.ok(new JwtAuthenticationResponse(jwt));
}
@PostMapping("/register")
public ResponseEntity<?> registerUser(@RequestBody SignUpRequest signUpRequest) {
if(userRepository.existsByUsername(signUpRequest.getUsername())) {
return new ResponseEntity<>("Username is already taken!", HttpStatus.BAD_REQUEST);
}
User user = new User();
user.setUsername(signUpRequest.getUsername());
user.setPassword(passwordEncoder.encode(signUpRequest.getPassword()));
user.setEmail(signUpRequest.getEmail());
userRepository.save(user);
return new ResponseEntity<>("User registered successfully", HttpStatus.OK);
}
}
配置 Spring Security:
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.cors()
.and()
.csrf().disable()
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and()
.authorizeRequests()
.antMatchers("/api/login", "/api/register").permitAll()
.anyRequest().authenticated()
.and()
.addFilterBefore(jwtAuthenticationFilter(), UsernamePasswordAuthenticationFilter.class);
}
}
数据库配置
配置 application.properties:
spring.datasource.url=jdbc:mysql://localhost:3306/yourdb
spring.datasource.username=root
spring.datasource.password=yourpassword
spring.jpa.hibernate.ddl-auto=update
跨域处理
在 Spring Boot 中添加 CORS 配置:
@Configuration
public class CorsConfig {
@Bean
public WebMvcConfigurer corsConfigurer() {
return new WebMvcConfigurer() {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/")
.allowedOrigins("http://localhost:8081") // Vue 开发服务器端口
.allowedMethods("GET", "POST", "PUT", "DELETE")
.allowedHeaders("*")
.allowCredentials(true);
}
};
}
}
测试流程
启动 Vue 开发服务器(通常运行在 8081 端口)
npm run serve
启动 Spring Boot 应用(默认 8080 端口)
mvn spring-boot:run
访问 Vue 应用测试登录注册功能:







