虽然不是讲的SpringBoot与SpringSecurity整合的,但是很有必要一看.篇幅很长
实战
不是基于前后端分离的,先玩会这个再来考虑前后端分离.
导入maven依赖
<dependencies>
...
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
...
</dependencies>
什么都不配置直接启动,账号是user,密码自动生成会在控制台打印出来;
自定义配置类
创建Spring Security Java配置。该配置创建了一个Servlet过滤器,称为springSecurityFilterChain,它负责应用程序中的所有安全性(保护应用程序的url、验证提交的用户名和密码、重定向到登录表单,等等)。
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Bean
@Override
public UserDetailsService userDetailsService(){
InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager();
//这里是否可以自定义逻辑呢?
//配置之后登陆账号密码就成了 user 与password 这样可以看出来.
manager.createUser(User.withUsername("user").password("password").roles("USER").build());
return manager;
}
}
HttpSecurity
protected void configure(HttpSecurity http) throws Exception {
http.formLogin() // 定义当需要用户登录时候,转到的登录页面。
.and()
.authorizeRequests() // 定义哪些URL需要被保护、哪些不需要被保护
.anyRequest() // 任何请求,登录后可以访问
.authenticated();
}
自定义登陆页面
来自官方文档
<c:url value="/login" var="loginUrl"/>
<form action="${loginUrl}" method="post"> 1
<c:if test="${param.error != null}"> 2
<p>
Invalid username and password.
</p>
</c:if>
<c:if test="${param.logout != null}"> 3
<p>
You have been logged out.
</p>
</c:if>
<p>
<label for="username">Username</label>
<input type="text" id="username" name="username"/> 4
</p>
<p>
<label for="password">Password</label>
<input type="password" id="password" name="password"/> 5
</p>
<input type="hidden" 6
name="${_csrf.parameterName}"
value="${_csrf.token}"/>
<button type="submit" class="btn">Log in</button>
</form>
1.发送到/login URL的POST将尝试对用户进行身份验证
2.如果查询参数错误存在,则尝试验证并失败
3.如果查询参数logout存在,则用户已成功登出
4.用户名必须作为名为username的HTTP参数出现
5.密码必须作为名为password的HTTP参数出现
6.跨站点请求伪造(CSRF)部分的参考
链接需求定制
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/resources/**", "/signup", "/about").permitAll()
.antMatchers("/admin/**").hasRole("ADMIN")
.antMatchers("/db/**").access("hasRole('ADMIN') and hasRole('DBA')")
.anyRequest().authenticated()
.and()
// ...
.formLogin();
}
等等…请看官方文档吧.
可以跟着这个博主做一下
我就不搬运了.