原创

SpringSectury专栏


SpringSecurity学习笔记

SpringSecurity

​ 非功能性需求

​ 安全应该在设计之初考虑设计

​ shiro、SpringSecurity 认证、授权(vip1,vip2...)

使用在:

  • ​ 功能权限

  • ​ 访问权限

  • ​ 菜单权限

    ​ ....

拦截器、过滤器:大量原生代码,冗余

WebSecurityConfigurerAdapter 自定义Security策略 适配器模式

AuthenticationManagerBuilder 自定义认证策略 建造者模式

@EnableWebSecurity 开启WebSecurity模式

​ Spring Security 主要目的就是 认证授权

​ 认证 Authentication

​ 授权 Authorization

固定的使用:

	@Configuration
	@EnableWebSecurity//开启Spring Security
	public class SecurityConfig extends WebSecurityConfigurerAdapter {
		@Override
		protected void configure(HttpSecurity http) throws Exception {
			//请求授权的规则
			http.authorizeRequests()
					//设置所有人可以访问的页面
					.antMatchers("/").permitAll()
					//设置level1下的所有页面只有vip1能访问
					.antMatchers("/level1/**").hasRole("vip1");
			//设置没有权限的进入登录页,需要开启登录的页面		
			http.formLogin();
			//开启了注销功能
			http.logout()
					//删除cookie和清除所有的session
					.deleteCookies("remove").invalidateHttpSession(true)
					//设置注销成功以后进入哪个页面
					.logoutSuccessUrl("/");
			//开启记住我功能  默认保存两周
			http.rememberMe();
		}
	}

认证的规则

密码编码 PasswordEncoder

Spring Security 5.0+ 以后 新增了加密方式

	@Override
	protected void configure(AuthenticationManagerBuilder auth) throws Exception {
					auth.inMemoryAuthentication()
					//增加密码编码
					.passwordEncoder(new BCryptPasswordEncoder())
					//存内存的时候 要给密码进行编码 不然会500错误
					.withUser("ityang").password(new BCryptPasswordEncoder()
					.encode("admin")).roles("vip1","vip2")
					.and()
					.withUser("root").password(new BCryptPasswordEncoder()
					.encode("admin")).roles("vip1","vip2","vip3");
	}

thymeleaf和security整合

导入依赖
	<dependency>
        <groupId>org.thymeleaf.extras</groupId>
        <artifactId>thymeleaf-extras-springsecurity5</artifactId>
        <version>3.0.4.RELEASE</version>
    </dependency>
网页需要导入命名空间:
	xmlns:th="http://www.thymeleaf.org/thymeleaf-extras-springsecurity5"
前端
后端
springboot

评论