SpringBoot+Vue前后端分离,使用SpringSecurity完美处理权限问题的解决方法
时间: 2023-10-28 17:18:32 浏览: 96
SpringBoot和Vue前后端分离的解决方案是非常常见的,而SpringSecurity则是SpringBoot中处理权限问题的最佳解决方案之一。下面介绍一下如何使用SpringSecurity完美处理权限问题。
1. 引入SpringSecurity依赖
在pom.xml中引入SpringSecurity依赖:
```xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
```
2. 配置SpringSecurity
在SpringBoot应用中,可以通过继承WebSecurityConfigurerAdapter类来配置SpringSecurity,代码如下:
```java
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private CustomUserService customUserService;
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/", "/index").permitAll()
.antMatchers("/admin/**").hasRole("ADMIN")
.anyRequest().authenticated()
.and()
.formLogin().loginPage("/login").defaultSuccessUrl("/home").permitAll()
.and()
.logout().logoutUrl("/logout").logoutSuccessUrl("/login").permitAll();
}
@Override
public void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(customUserService).passwordEncoder(new BCryptPasswordEncoder());
}
@Override
public void configure(WebSecurity web) throws Exception {
web.ignoring().antMatchers("/static/**");
}
}
```
3. 自定义用户认证
在上面的代码中,我们使用了自定义的用户认证服务CustomUserService。CustomUserService实现了UserDetailsService接口,代码如下:
```java
@Service
public class CustomUserService implements UserDetailsService {
@Autowired
private UserRepository userRepository;
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
User user = userRepository.findByUsername(username);
if (user == null) {
throw new UsernameNotFoundException("用户名不存在!");
}
List<GrantedAuthority> authorities = new ArrayList<>();
for (Role role : user.getRoles()) {
authorities.add(new SimpleGrantedAuthority(role.getName()));
}
return new org.springframework.security.core.userdetails.User(user.getUsername(), user.getPassword(), authorities);
}
}
```
在上面的代码中,我们使用了自定义的UserRepository来获取用户信息,然后将用户的角色转换成GrantedAuthority对象,返回给SpringSecurity。
4. 在Vue中处理权限问题
在Vue中,我们可以通过Vue Router的导航守卫来处理权限问题。代码如下:
```javascript
import router from './router'
import store from './store'
router.beforeEach((to, from, next) => {
if (to.meta.requireAuth) { // 判断该路由是否需要登录权限
if (store.state.token) { // 获取当前的token是否存在
next()
} else {
next({
path: '/login',
query: {redirect: to.fullPath} // 将跳转的路由path作为参数,登录成功后跳转到该路由
})
}
} else {
next()
}
})
```
在上面的代码中,我们通过store来获取当前用户的token,如果token存在则允许访问,否则跳转到登录页面。
以上就是使用SpringSecurity处理权限问题的完整解决方案。
阅读全文