zoukankan      html  css  js  c++  java
  • spring security

    spring security 
    认证管理器,访问决策管理器,运行身份管理器
    basic认证:用户名密码认证,密码明文,用户名密码会用base64加密传输,无状态的,不安全
    digest认证:当访问特定资源,对数据md5运算,发送给服务器,根据报文头部获取username,查询获取密码md5进行比较。
    x.509:x509的版本号,证书持有人的公钥,证书的序列号(ca给与的唯一编号)
    ldap:轻量级访问协议。
    Form:表单认证。
    
    过滤器:
     SecurityContextPersistenceFilter
     过滤session中是否存在SecurityContext,存在就放入SecurityContextHolder中。
     不存在就创建一个放入。
     所有过滤器完成后清除SecurityContextHolder中的内容[基于threadlocal必须清空]
     LogoutFilter:只处理注销请求,在用户发送注销,销毁 session,清空SecurityContextHolder,重定向推出页面
     AbstractAuthenticationProcessingFilter:处理form登录的过滤器,管理登录成功失败啥的
     DefaultLoginPageGeneratingFiter:默认登录的页面 
     BasicAuthenticationFilter:AbstractAuthenticationProcessingFilter类似
     SecurityContextHolderAwareRequestFilter:包装用户请求
     RememberMeAuthenticationFilter:自动登录功能。
     AnonymousAuthenticationFilter:当用户没有登录时,会分配匿名用户。
     ExceptionTranslationFilter:处理框架抛出异常。
     SessionManagementFilter:防止伪造攻击
     FilterSecurityInterceptor:未登录抛出未登录异常,已登录没有访问权限,则抛异常,登录正常就放行。
     
     FilterChainProxy:[一组拦截器]
     
     接口:
     interface UserDetailsService
     {
    UserDetails loadUserByUsername(username);
    
     }
     //任何返回false,就是判定无效
     interface UserDetails{
     Collection<? extends GrantedAuthority> getAuthorities();//集合权限
     str getPassword();
     str getUsername();
     flag isAccountNonExpired();//账户有没有过期
     flag iSAccountNonLocked();//账户没有被锁定
     flag isCredentialsNonExpired();//证书没有过期
     flag isEnabled();//账户是否有效
     }
     //真正安全控制
     interface Authentication{
      Collection getAuthorities();//集合权限
     Object getCredentials();//获取凭证
     Object getDetails();//获取认证一些额外信息
     Object getPrincipal();//过去认证的实体
     flag isAuthenticated();//是否认证通过
     }
     
     
    

      基础搭建:https://start.spring.io/

    引入web和security框架

    package com.example.demo;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    @SpringBootApplication
    public class DemoApplication {
    
    	public static void main(String[] args) {
    		SpringApplication.run(DemoApplication.class, args);
    	}
    
    	@RequestMapping("/")
    	public String home(){
    		return "Hello word";
    	}
    
    	@RequestMapping("/hello")
    	public String hello(){
    		return "你好 ";
    	}
    }
    

      SpringSecurityConfig

    package com.example.demo;
    
    import org.springframework.context.annotation.Configuration;
    import org.springframework.security.config.annotation.web.builders.HttpSecurity;
    import org.springframework.security.config.annotation.web.builders.WebSecurity;
    import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
    import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
    
    @Configuration
    @EnableWebSecurity
    public class SpringSecurityConfig  extends WebSecurityConfigurerAdapter {
    
        //项目路径放行,其他权限验证,注销可以访问,表单登录支持
        @Override
        protected void configure(HttpSecurity http) throws Exception {
            http.authorizeRequests().antMatchers("/").permitAll()
            .anyRequest().authenticated()
            .and()
            .logout().permitAll().and()
            .formLogin();
        }
    
        @Override
        public void configure(WebSecurity web) throws Exception {
            web.ignoring().antMatchers("/js/**","/css/**","/images/**");
        }
    }
    

      

  • 相关阅读:
    原码, 反码, 补码 详解
    位移运算符
    ASP.NET中httpmodules与httphandlers全解析
    MySQL count
    真正的能理解CSS中的line-height,height与line-height
    IfcEvent
    IfcWorkCalendarTypeEnum
    IfcSingleProjectInstance
    转换模型
    IfcTypeProduct
  • 原文地址:https://www.cnblogs.com/q1359720840/p/10977075.html
Copyright © 2011-2022 走看看