前期准备
package com.example.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @Controller public class TestController { @RequestMapping("/") public String index(){ return "index"; } @RequestMapping("/toLogin") public String toLogin(){ return "views/login"; } @RequestMapping("/level1/{id}") public String level1(@PathVariable("id") int id){ return "views/level1/"+id; } @RequestMapping("/level2/{id}") public String level2(@PathVariable("id") int id){ return "views/level2/"+id; } @RequestMapping("/level3/{id}") public String level3(@PathVariable("id") int id){ return "views/level3/"+id; } }
引入spring-boot-starter-security模块
org.springframework.boot spring-boot-starter-security
认识SpringSecurity的几个重要的类
SpringSecurity---授权(认真看代码和注释)
//授权 @Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests().antMatchers("/").permitAll() //首页所有人可以访问 .antMatchers("/level1/**").hasRole("vip1") //level1下的页面,VIP1可以访问 .antMatchers("/level2/**").hasRole("vip2") .antMatchers("/level3/**").hasRole("vip3"); //开启自动配置的登录功能, //即,没有登录的时候,除了首页,其他页面都访问不了,这时候,你访问其他页面的时候, //它直接跳转到它内置的登陆页面,让你登录 http.formLogin(); http.formLogin().loginPage("/toLogin");//自定义登录页,将自定义的登录页替换掉内置的登录页 //用来处理用户登录提交的表单 http.formLogin().usernameParameter("username") .passwordParameter("password") .loginPage("/toLogin") .loginProcessingUrl("/login"); //开启自动配置的注销的功能 // /logout 注销请求 http.logout(); http.csrf().disable();//关闭csrf功能:跨站请求伪造,默认只能通过post方式提交logout请求 http.logout().logoutSuccessUrl("/");//注销成功就返回首页 //开启记住我功能 http.rememberMe(); http.rememberMe().rememberMeParameter("remember");//在自定义登录页添加 记住我 }
SpringSecurity---认证(认真看代码和注释)
//认证 @Override protected void configure(AuthenticationManagerBuilder auth) throws Exception { /* auth.inMemoryAuthentication().withUser("xiaomi").password("123").roles("vip1") 这样写是不行的,会出现500错误。 原因:密码没有加密 Spring security 5.0中新增了多种加密方式,也改变了密码的格式。 要想我们的项目还能够正常登陆,需要修改一下configure中的代码。我们要将前端传过来的密码进行某种方式加密 spring security 官方推荐的是使用bcrypt加密方式。 这里通过 passwordEncoder(new BCryptPasswordEncoder()) 的方式进行加密 */ // 在内存中定义认证的规则 auth.inMemoryAuthentication().passwordEncoder(new BCryptPasswordEncoder()) .withUser("xiaolong").password(new BCryptPasswordEncoder().encode("123456")).roles("vip1") .and() .withUser("xiaomi").password(new BCryptPasswordEncoder().encode("123456")).roles("vip1","vip2") .and() .withUser("xiaohu").password(new BCryptPasswordEncoder().encode("123456")).roles("vip1","vip2","vip3"); //在jdbc中定义认证的规则 //auth.jdbcAuthentication() }
启动测试
login.html
登录 登录
注册
Spring Security
index.html
首页
以上就是Spring Security的简单使用的详细内容,更多关于Spring Security的使用的资料请关注其它相关文章!