Springboot整合SpringSecurity实现登录认证和鉴权
时间: 2024-02-28 10:43:47 浏览: 25
好的,Spring Boot整合Spring Security实现登录认证和鉴权可以分为以下几个步骤:
1. 添加Spring Security依赖:在pom.xml文件中添加Spring Security依赖。
2. 配置Spring Security:创建一个配置类,继承WebSecurityConfigurerAdapter,重写configure(HttpSecurity http)和configure(AuthenticationManagerBuilder auth)方法,配置登录认证和鉴权的相关信息。
3. 创建登录页面:在templates目录下创建login.html页面,用于用户登录。
4. 创建登录处理接口:创建一个controller接口,用于处理用户登录请求。
5. 创建用户实体类和用户服务类:创建一个用户实体类,用于存储用户信息;创建一个用户服务类,用于查询用户信息。
6. 配置密码加密:在用户服务类中,使用BCryptPasswordEncoder对密码进行加密。
7. 测试登录认证和鉴权功能:启动应用程序,访问login.html页面,输入正确的用户名和密码,验证登录认证功能;访问受保护的资源,验证鉴权功能。
以上就是Spring Boot整合Spring Security实现登录认证和鉴权的基本步骤。
相关问题
springboot整合spring security 实现用户登录注册与鉴权全记录
1. 引入依赖
在pom.xml文件中引入Spring Security依赖:
```
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
```
2. 添加配置类
在项目中添加一个配置类SecurityConfig,继承自WebSecurityConfigurerAdapter。
```
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/login", "/register").permitAll() // 登录注册页面不需要验证
.anyRequest().authenticated() // 其他页面需要验证
.and()
.formLogin()
.loginPage("/login") // 登录页面
.defaultSuccessUrl("/index") // 登录成功后的默认跳转页面
.and()
.logout()
.logoutUrl("/logout") // 退出登录的URL
.logoutSuccessUrl("/login") // 退出登录后跳转到的页面
.invalidateHttpSession(true)
.deleteCookies("JSESSIONID");
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication() // 在内存中存储用户信息
.withUser("admin").password("{noop}admin").roles("ADMIN")
.and()
.withUser("user").password("{noop}user").roles("USER");
}
}
```
3. 实现登录与注册功能
创建登录页面login.html和注册页面register.html,使用Thymeleaf模板引擎渲染页面。
在Controller中添加登录和注册的请求处理方法。
```
@Controller
public class UserController {
@GetMapping("/login")
public String login() {
return "login";
}
@PostMapping("/login")
public String loginSuccess() {
return "redirect:/index";
}
@GetMapping("/register")
public String register() {
return "register";
}
@PostMapping("/register")
public String registerSuccess() {
return "redirect:/login";
}
}
```
4. 实现用户鉴权功能
在SecurityConfig中重写configure(AuthenticationManagerBuilder auth)方法,实现用户信息的认证。
这里使用inMemoryAuthentication()方法在内存中存储用户信息,实际应用中可以使用数据库存储。
```
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication() // 在内存中存储用户信息
.withUser("admin").password("{noop}admin").roles("ADMIN")
.and()
.withUser("user").password("{noop}user").roles("USER");
}
```
在Controller中添加需要鉴权的请求处理方法,并在方法上添加@PreAuthorize注解指定需要的权限。
```
@Controller
public class UserController {
@GetMapping("/admin")
@PreAuthorize("hasRole('ADMIN')")
public String admin() {
return "admin";
}
@GetMapping("/user")
@PreAuthorize("hasRole('USER')")
public String user() {
return "user";
}
}
```
5. 配置登录认证
在SecurityConfig中重写configure(HttpSecurity http)方法,配置登录认证信息。
```
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/login", "/register").permitAll() // 登录注册页面不需要验证
.anyRequest().authenticated() // 其他页面需要验证
.and()
.formLogin()
.loginPage("/login") // 登录页面
.defaultSuccessUrl("/index") // 登录成功后的默认跳转页面
.and()
.logout()
.logoutUrl("/logout") // 退出登录的URL
.logoutSuccessUrl("/login") // 退出登录后跳转到的页面
.invalidateHttpSession(true)
.deleteCookies("JSESSIONID");
}
```
6. 测试
启动应用,在浏览器中访问http://localhost:8080/login,输入用户名和密码进行登录,登录成功后跳转到首页。
访问http://localhost:8080/admin和http://localhost:8080/user,根据用户角色的不同,页面会有不同的显示。如果访问没有权限的页面,会自动跳转到登录页面。在登录状态下访问/logout可以退出登录。
springboot中整合springsecurity实现登录认证和数据权限管理
在Spring Boot中整合Spring Security可以实现登录认证和数据权限管理。下面是简单的步骤:
1. 添加依赖
在pom.xml文件中添加以下依赖:
```xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
```
2. 配置Spring Security
在主配置类中添加@EnableWebSecurity注解,开启Spring Security,并且创建一个继承自WebSecurityConfigurerAdapter的配置类,用于配置Spring Security。
```java
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
// 配置登录页面和登录请求的路径
http.formLogin()
.loginPage("/login")
.loginProcessingUrl("/login")
.defaultSuccessURL("/home")
.and()
// 配置退出登录的路径和跳转页面
.logout()
.logoutUrl("/logout")
.logoutSuccessUrl("/login")
.and()
// 配置拦截规则
.authorizeRequests()
.antMatchers("/login").permitAll()
.anyRequest().authenticated()
.and()
// 关闭CSRF保护
.csrf().disable();
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
// 配置用户信息和密码加密方式
auth.inMemoryAuthentication()
.passwordEncoder(new BCryptPasswordEncoder())
.withUser("admin")
.password(new BCryptPasswordEncoder().encode("admin"))
.roles("ADMIN");
}
}
```
3. 配置数据权限管理
如果需要实现数据权限管理,可以在配置类中添加一个实现了FilterInvocationSecurityMetadataSource接口的类,用于获取当前请求所需的权限信息,并且在配置类中添加一个实现了AccessDecisionManager接口的类,用于判断当前用户是否有访问该资源的权限。
```java
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private CustomFilterInvocationSecurityMetadataSource customFilterInvocationSecurityMetadataSource;
@Autowired
private CustomAccessDecisionManager customAccessDecisionManager;
@Override
protected void configure(HttpSecurity http) throws Exception {
// 配置拦截规则
http.authorizeRequests()
.withObjectPostProcessor(new ObjectPostProcessor<FilterSecurityInterceptor>() {
@Override
public <O extends FilterSecurityInterceptor> O postProcess(O object) {
object.setSecurityMetadataSource(customFilterInvocationSecurityMetadataSource);
object.setAccessDecisionManager(customAccessDecisionManager);
return object;
}
})
.and()
// 关闭CSRF保护
.csrf().disable();
}
}
```
参考资料:
1. Spring Security官方文档:https://docs.spring.io/spring-security/site/docs/current/reference/htmlsingle/
2. Spring Boot整合Spring Security实现登录认证和数据权限管理:https://www.jianshu.com/p/04d848c9cb8d