您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# 如何实现SpringBoot+Angular普通登录
## 前言
在现代Web应用开发中,前后端分离架构已成为主流模式。本文将通过SpringBoot作为后端框架,Angular作为前端框架,演示如何实现一个完整的普通登录功能。我们将涵盖以下核心内容:
1. SpringBoot后端API开发
2. Angular前端页面构建
3. 前后端数据交互
4. 基础安全防护措施
---
## 一、SpringBoot后端实现
### 1. 项目初始化
使用Spring Initializr创建项目,添加依赖:
```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>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
@Data
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String username;
private String password;
}
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable()
.authorizeRequests()
.antMatchers("/api/login").permitAll()
.anyRequest().authenticated()
.and()
.addFilter(new JwtAuthenticationFilter(authenticationManager()));
}
}
@RestController
@RequestMapping("/api")
public class AuthController {
@PostMapping("/login")
public ResponseEntity<?> login(@RequestBody LoginRequest request) {
// 验证用户名密码逻辑
if(authenticate(request.getUsername(), request.getPassword())) {
String token = JwtUtil.generateToken(request.getUsername());
return ResponseEntity.ok(new AuthResponse(token));
}
return ResponseEntity.status(401).body("认证失败");
}
}
ng new angular-login-demo
cd angular-login-demo
ng generate component login
<!-- login.component.html -->
<form (ngSubmit)="onSubmit()">
<div>
<label>用户名:</label>
<input type="text" [(ngModel)]="username" name="username" required>
</div>
<div>
<label>密码:</label>
<input type="password" [(ngModel)]="password" name="password" required>
</div>
<button type="submit">登录</button>
</form>
// auth.service.ts
@Injectable({
providedIn: 'root'
})
export class AuthService {
private apiUrl = 'http://localhost:8080/api/login';
constructor(private http: HttpClient) {}
login(username: string, password: string): Observable<any> {
return this.http.post(this.apiUrl, { username, password });
}
}
// login.component.ts
export class LoginComponent {
username = '';
password = '';
constructor(private authService: AuthService, private router: Router) {}
onSubmit(): void {
this.authService.login(this.username, this.password).subscribe(
response => {
localStorage.setItem('token', response.token);
this.router.navigate(['/dashboard']);
},
error => {
console.error('登录失败', error);
}
);
}
}
SpringBoot端添加配置:
@Bean
public WebMvcConfigurer corsConfigurer() {
return new WebMvcConfigurer() {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("http://localhost:4200")
.allowedMethods("*");
}
};
}
Angular服务中添加拦截器:
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
const token = localStorage.getItem('token');
if (token) {
req = req.clone({
setHeaders: { Authorization: `Bearer ${token}` }
});
}
return next.handle(req);
}
ng serve
默认端口4200)通过本文的实践,我们完成了SpringBoot+Angular的普通登录功能实现。这个基础方案可以进一步扩展为: - 添加注册功能 - 实现角色权限控制 - 集成第三方登录(OAuth2) - 添加验证码功能
完整代码示例可在GitHub获取(假设的仓库链接)。希望这篇指南能帮助你快速入门前后端分离架构下的登录功能开发。 “`
注:实际实现时需要根据具体需求调整代码,本文示例省略了部分细节(如数据库操作、错误处理的完整实现等),在实际项目中应补充完整。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。