SpringSecurity实现不同角色访问不同页面代码
时间: 2023-06-10 08:05:29 浏览: 181
Spring Security 可以通过配置不同的角色、权限以及访问控制规则来实现不同角色访问不同页面的功能。下面是一个基本的 Spring Security 配置示例,可以根据实际需求进行修改。
1. 配置授权规则
```java
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/admin/**").hasRole("admin")
.antMatchers("/user/**").hasAnyRole("admin", "user")
.antMatchers("/public/**").permitAll()
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/login").permitAll()
.and()
.logout().permitAll();
}
}
```
在上面的代码中,我们配置了三个规则:
- `/admin/**` 路径需要角色为 admin 的用户才能访问;
- `/user/**` 路径需要角色为 admin 或 user 的用户才能访问;
- `/public/**` 路径允许所有用户访问。
还有一个 `.anyRequest().authenticated()` 的规则表示其他路径需要用户登录后才能访问。
2. 配置用户角色
```java
@Service
public class UserDetailsServiceImpl 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("User not found");
}
Set<GrantedAuthority> grantedAuthorities = new HashSet<>();
for (Role role : user.getRoles()) {
grantedAuthorities.add(new SimpleGrantedAuthority(role.getName()));
}
return new org.springframework.security.core.userdetails.User(
user.getUsername(),
user.getPassword(),
grantedAuthorities
);
}
}
```
在上面的代码中,我们从数据库中获取用户信息,并将用户的角色转换为 Spring Security 的 GrantedAuthority 对象。具体来说,我们将 Role 对象的 name 属性作为角色名称,创建一个 SimpleGrantedAuthority 对象,并将其放入一个 Set 集合中。然后,我们将这个集合传递给 org.springframework.security.core.userdetails.User 对象,这样 Spring Security 就能识别出这个用户的角色了。
3. 配置密码加密
```java
@Configuration
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
}
```
在上面的配置中,我们使用 BCryptPasswordEncoder 对象对密码进行加密处理。
有了上面这些配置,我们就可以实现在不同角色访问不同页面的功能了。需要注意的是,为了保证安全,不同角色访问不同页面时需要进行授权和验证,不能仅仅是简单地隐藏或脱离链接。
阅读全文