Spring Security简单配置与使用

配置

要使用Security就要继承WebSecurityConfigurerAdapter并重写授权规则和认证规则

import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
//要使用Security就要继承WebSecurityConfigurerAdapter并重写授权规则和认证规则
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

   //定制请求的授权规则
   @Override
   protected void configure(HttpSecurity http) throws Exception {
		//antMatchers为开启拦截的目录,hasRole是需要的权限,只有满足特定权限才能访问目录
       http.authorizeRequests().antMatchers("/").permitAll()
      .antMatchers("/level1/**").hasRole("vip1")
      .antMatchers("/level2/**").hasRole("vip2")
      .antMatchers("/level3/**").hasRole("vip3");


       //开启自动配置的登录功能:如果没有权限,就会跳转到登录页面!
       // /login 请求来到登录页
       // /login?error 重定向到这里表示登录失败
       http.formLogin()
       	  //登录表单的用户名的name
          .usernameParameter("username")
          //登录表单的密码的name
          .passwordParameter("password")
          //自定意的登录表单地址
       	  .loginPage("/toLogin")
          .loginProcessingUrl("/login"); // 登陆表单提交请求

       /*开启自动配置的注销的功能
        /logout 注销请求
       .logoutSuccessUrl("/"); 注销成功来到首页*/
	   http.logout().logoutSuccessUrl("/");
       http.csrf().disable();//关闭csrf功能:跨站请求伪造,默认只能通过post方式提交logout请求
       

       //记住我           页面中记住我的name
       http.rememberMe().rememberMeParameter("remember");
  }

   //定义认证规则
   @Override
   protected void configure(AuthenticationManagerBuilder auth) throws Exception {
       //在内存中定义,也可以在jdbc中去拿....
       //Spring security 5.0中新增了多种加密方式,也改变了密码的格式。
       //要想我们的项目还能够正常登陆,需要修改一下configure中的代码。我们要将前端传过来的密码进行某种方式加密
       //spring security 官方推荐的是使用bcrypt加密方式。
	   //.passwordEncoder(new BCryptPasswordEncoder())加密方式
	   //.withUser("root")用户名
	   //.password(new BCryptPasswordEncoder().encode("123456"))密码使用BCryptPasswordEncoder()进行加密
	   //roles("vip1","vip2","vip3")用户权限
	   //每个用户之间用and连接
       auth.inMemoryAuthentication().passwordEncoder(new BCryptPasswordEncoder())
              .withUser("root").password(new BCryptPasswordEncoder().encode("123456")).roles("vip1","vip2","vip3")
              .and()
              .withUser("guest").password(new BCryptPasswordEncoder().encode("123456")).roles("vip1","vip2");
      //数据库使用以下代码
      auth.jdbcAuthentication().withUser("用户名").password(new BCryptPasswordEncoder().encode("密码")).roles("权限").and()后接下一个用户
  }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值