循序渐进之单点登录(2)--SpringSecurity入门

不看官方文档还想看啥?

虽然不是讲的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();
}

等等…请看官方文档吧.

可以跟着这个博主做一下
我就不搬运了.

发布了37 篇原创文章 · 获赞 6 · 访问量 4662

猜你喜欢

转载自blog.csdn.net/littlewhitevg/article/details/103848101