下面就来为大家详细讲解 SpringBoot 整合 Security 权限控制的初步配置。
1. 引入依赖
首先,在项目的 pom.xml 文件中,我们需要引入 Spring Security 的依赖,具体代码如下:
<!-- Spring Security -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
2. 添加配置类
完成依赖的引入后,我们需要添加一个配置类,用于配置我们的 Security 策略。下面是一个示例代码:
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private LogoutSuccessHandler logoutSuccessHandler;
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication()
.withUser("user").password(passwordEncoder().encode("123456")).roles("USER")
.and()
.withUser("admin").password(passwordEncoder().encode("admin123")).roles("ADMIN");
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/admin/**").hasRole("ADMIN")
.antMatchers("/user/**").hasRole("USER")
.anyRequest().permitAll()
.and()
.formLogin()
.loginPage("/login")
.loginProcessingUrl("/login")
.defaultSuccessURL("/")
.failureUrl("/login?error")
.permitAll()
.and()
.logout()
.logoutUrl("/logout")
.logoutSuccessHandler(logoutSuccessHandler)
.permitAll()
.and()
.csrf().disable();
}
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
}
在这个配置类中,我们分别实现了两个方法:
-
configure(AuthenticationManagerBuilder auth)
:这个方法用于配置用户信息,包括用户名、密码和角色等信息。在示例代码中,我们采用了基于内存的方式配置用户信息。 -
configure(HttpSecurity http)
:这个方法用于配置访问控制规则。在示例代码中,我们配置了不同角色用户访问不同的 URL 权限,同时定制了登录页面、成功跳转页面和退出登录 URL 等信息。
3. 自定义 LogoutSuccessHandler
在我们的配置类中,我们还注入了一个 LogoutSuccessHandler 实例,用于处理退出登录成功后的逻辑,例如重定向到登录页或者首页等。
我们需要自定义 LogoutSuccessHandler,示例代码如下:
@Component
public class MyLogoutSuccessHandler implements LogoutSuccessHandler {
@Override
public void onLogoutSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException {
response.sendRedirect("/login");
}
}
4. 添加登录页面
最后,我们需要添加一个登录页面,示例代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Login Page</title>
</head>
<body>
<h1>Login Page</h1>
<form action="/login" method="post">
<div>
<label>Username:</label>
<input type="text" name="username">
</div>
<div>
<label>Password:</label>
<input type="password" name="password">
</div>
<input type="submit" value="Login">
</form>
</body>
</html>
注意,这里的表单 action 值需要与配置类中的登录路径一致。
示例一:管理员和用户分别访问不同的 URL
我们设置了管理员和普通用户分别可以访问不同的 URL:
-
管理员访问
/admin/**
所有资源路径时需要 ADMIN 角色。 -
用户访问
/user/**
所有资源路径时需要 USER 角色。
下面是示例代码:
@GetMapping("/admin/hello")
@PreAuthorize("hasRole('ADMIN')")
public String adminHello() {
return "hello, admin!";
}
@GetMapping("/user/hello")
@PreAuthorize("hasRole('USER')")
public String userHello() {
return "hello, user!";
}
示例二:退出登录
我们配置了退出登录后跳转到登录页面:
.logout()
.logoutUrl("/logout")
.logoutSuccessHandler(logoutSuccessHandler)
.permitAll()
并且实现了自定义的 LogoutSuccessHandler:
@Component
public class MyLogoutSuccessHandler implements LogoutSuccessHandler {
@Override
public void onLogoutSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException {
response.sendRedirect("/login");
}
}
以上就是 SpringBoot 整合 Security 权限控制的初步配置攻略,希望能对大家有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringBoot 整合Security权限控制的初步配置 - Python技术站