Spring boot与Spring Security
- 应用程序的两个主要区域:认证、授权
认证(Authentication)
- 建立一个他声明的主体的过程(一个主体,一般是指用户,设备,或一些可以在你的应用程序中执行动作的其它系统)。
授权(Authorization)
- 指确定一个主体是否允许在你的应用程序中执行一个动作的过程,为了抵达需要授权的页面,主体的身份已经有认证过程建立。
Spring boot中使用Spring Security
- 1、引入SpringSecurity;
- 可以直接在快速建立工程中直接引入
- 或者在pom文件中引入;
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
- 2.编写SpringSecurity的配置类;
- 在类上加上注解;@EnableWebSecurity
- 继承WebSecurityConfigurerAdapter
- 3、控制请求的访问权限:
- 重写configure(HttpSecurity http) 方法,利用HttpSecurity的authorizeRequests方法,设置各个访问路径的所需要的权限
@Override
protected void configure(HttpSecurity http) throws Exception {
//定制请求的授权规则
http.authorizeRequests().antMatchers("/").permitAll()
.antMatchers("/level1/**").hasRole("VIP1")
.antMatchers("/level2/**").hasRole("VIP2")
.antMatchers("/level3/**").hasRole("VIP3");
}
-
4、定义认证规则
- /重写configure(AuthenticationManagerBuilder auth)方法,利用AuthenticationManagerBuilder的inMemoryAuthentication方法指定对应用户的权限,这里可以对接到数据库上,这里为了测试方便,先直接写死
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
//为测试方便,直接写死,不放在数据库里面
auth.inMemoryAuthentication().withUser("123456").password("123456").roles("VIP1","VIP2")
.and()
.withUser("username2").password("password").roles("VIP1","VIP2","VIP3")
.and()
.withUser("username3").password("password").roles("VIP1");
}
- 5、开启自动配置登录功能;
//开启主动配置登录功能,效果:如果没有登录权限,就会来到登录页面
http.formLogin().usernameParameter("user").passwordParameter("pwd")
.loginPage("/userlogin");
//1./login来到登录页面
//2.重定向到/login?error表示登录失败
//3.更多详细规定
//4、默认post形式的 /login代表处理登陆
//5、loginPage("/userlogin")是定制页面,而一但定制loginPage;那么 loginPage的post请求就是登陆
- 6、注销:http.logout();同上
//开启自动配置的注销功能。
http.logout().logoutSuccessUrl("/");//注销成功以后来到首页
//1、访问 /logout 表示用户注销,清空session
//2、注销成功会返回 /login?logout 页面(假如只是http.logout()没有注销成功后跳转url的话默认返回登录界面);
- 7、记住我:Remeberme();同上
- 原理:
- 第一次登录勾选了记住我选项,服务器就会给浏览器发送一个Cookies叫Remember-me,在这个Cookies过期之前,以后访问页面带上这个cookie,都能被Spring Securty找到账户信息并认证通过,这样达到记住密码的效果,不用再输入密码。
- 原理:
//开启记住我功能
http.rememberMe().rememberMeParameter("remeber");
//点击注销会删除cookie,就是说点击注销,下次就不会自动登录了
//rememberMeParameter("remeber");这里表示获取请求体中name属性是remember的信息内容,一般写在checkbox中
- PS:567的方法是在configure(HttpSecurity http)中使用的
网友评论