springboot vue登录界面使用jwt鉴权
时间: 2023-11-30 18:41:40 浏览: 61
为了实现SpringBoot+Vue前后端分离的登录界面使用JWT鉴权,需要进行以下步骤:
1.在SpringBoot中配置SpringSecurity,包括用户认证和授权,可以参考引用中的实现方式。
2.在SpringBoot中配置JWT,包括生成Token和解析Token,可以使用jjwt库实现,可以参考引用中的maven依赖配置。
3.在Vue中实现登录界面,包括输入用户名和密码,发送POST请求到后端验证用户信息,并获取Token。
4.在Vue中使用获取到的Token进行后续请求的鉴权,可以在请求头中添加Authorization字段,值为Bearer加上Token。
下面是一个简单的示例代码,仅供参考:
1. SpringBoot中的配置
```java
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private UserDetailsService userDetailsService;
@Autowired
private JwtAuthenticationEntryPoint unauthorizedHandler;
@Bean
public JwtAuthenticationFilter jwtAuthenticationFilter() {
return new JwtAuthenticationFilter();
}
@Override
public void configure(AuthenticationManagerBuilder authenticationManagerBuilder) throws Exception {
authenticationManagerBuilder
.userDetailsService(userDetailsService)
.passwordEncoder(passwordEncoder());
}
@Bean(BeanIds.AUTHENTICATION_MANAGER)
@Override
public AuthenticationManager authenticationManagerBean() throws Exception {
return super.authenticationManagerBean();
}
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.cors()
.and()
.csrf()
.disable()
.exceptionHandling()
.authenticationEntryPoint(unauthorizedHandler)
.and()
.sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and()
.authorizeRequests()
.antMatchers("/api/auth/**")
.permitAll()
.anyRequest()
.authenticated();
// Add our custom JWT security filter
http.addFilterBefore(jwtAuthenticationFilter(), UsernamePasswordAuthenticationFilter.class);
}
}
```
2. Vue中的登录界面
```html
<template>
<div>
<h2>Login</h2>
<form @submit.prevent="login">
<div>
<label>Username:</label>
<input type="text" v-model="username" required>
</div>
<div>
<label>Password:</label>
<input type="password" v-model="password" required>
</div>
<button type="submit">Login</button>
</form>
</div>
</template>
<script>
import axios from 'axios';
export default {
data() {
return {
username: '',
password: ''
};
},
methods: {
async login() {
try {
const response = await axios.post('/api/auth/login', {
username: this.username,
password: this.password
});
const token = response.data.token;
localStorage.setItem('token', token);
axios.defaults.headers.common['Authorization'] = `Bearer ${token}`;
this.$router.push('/');
} catch (error) {
console.error(error);
}
}
}
};
</script>
```
3. Vue中的请求鉴权
```javascript
import axios from 'axios';
const token = localStorage.getItem('token');
if (token) {
axios.defaults.headers.common['Authorization'] = `Bearer ${token}`;
}
axios.get('/api/protected/resource')
.then(response => {
console.log(response.data);
})
.catch(error => {
console.error(error);
});
```