zoukankan      html  css  js  c++  java
  • spring认证的一些核心类

    SecurityContextHolder, to provide access to the SecurityContext. 
    SecurityContext: to hold the Authentication and possibly request-specific security information. 
    Authentication: 表示用户认证信息
    GrantedAuthority: 当前用户拥有的权限,通过Authentication的getAuthorities()获取,是一个数组。 
    UserDetails: 定义了一些可以获取用户名、密码、权限等与认证相关的信息的方法,通过UserDetailsService的loadUserByUsername()方法进行加载。
    UserDetailsService: org.springframework.security.core.userdetails.jdbc.JdbcDaoImpl(通过数据库或内存获取UserDetails)
    UserDetailsService->UserDetails
    UserDetailsService->GrantedAuthority(role)
    SecurityContextHolder->SecurityContext->Authentication(principal,)
    加载用户dao相关:
    UserDetailsService(接口):loadUserByUsername(String username) 子类
        UserDetailsManager:(接口)changePassword(String oldPassword, String newPassword),createUser(UserDetails user),deleteUser(String username)等
        CachingUserDetailsService:
        InMemoryUserDetailsManager: 
        JdbcDaoImpl:
            JdbcUserDetailsManager: 
        LdapUserDetailsManager:
        LdapUserDetailsService:
    用户信息相关:
    UserDetails:(接口)getAuthorities(),getPassword(),getUsername(),isAccountNonExpired()等
        InetOrgPerson:
        LdapUserDetailsImpl:
        LdapUserDetailsImpl:
        Person:UserDetails implementation whose properties are based on the LDAP schema for Person.
        User:(类)
    认证相关:
    Principal:(java.security)equals(Object another),getName() 
        Authentication:(接口)一旦一个request被认证,Authentication 就会被放入 thread-local SecurityContext managed by the SecurityContextHolder 
                        SecurityContextHolder.getContext().setAuthentication(anAuthentication);显式认证,
                        Collection<? extends GrantedAuthority> getAuthorities(),getCredentials(), getDetails(),getPrincipal()
            UsernamePasswordAuthenticationToken:for simple presentation of a username and password. 
            RememberMeAuthenticationToken:
            OpenIDAuthenticationToken:
            ...
    GrantedAuthority:(接口)getAuthority()该方法返回一个字符串,表示对应权限的字符串表示,如果对应权限不能用字符串表示,则应当返回null。
        SimpleGrantedAuthority:为Authentication存放一个代表权限的字符串.
        ...
    AuthenticationManager:(接口)处理一个Authentication request, Authentication authenticate(Authentication authentication)
        ProviderManager:通过AuthenticationProvider列表来处理认证请求,List<AuthenticationProvider> getProviders()  
                            authenticate(Authentication authentication) 
    AuthenticationProvider:(接口)
        DaoAuthenticationProvider:从UserDetailsService获取一个user,getUserDetailsService(),
                        retrieveUser(String username, UsernamePasswordAuthenticationToken authentication)
    
    
    异常相关:
    AuthenticationException:
    
    AuthenticationServiceException
    过滤器相关:
    Filter(javax.servlet):void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)  
        GenericFilterBean
            DelegatingFilterProxy:
            OncePerRequestFilter:
            FilterChainProxy:
            AbstractAuthenticationProcessingFilter: attemptAuthentication (request,response),getFailureHandler(),getSuccessHandler() 
                                successfulAuthentication(),unsuccessfulAuthentication()
                CasAuthenticationFilter,
                OpenIDAuthenticationFilter
                UsernamePasswordAuthenticationFilter:getPasswordParameter() ,getUsernameParameter() ,obtainPassword( request) ,setDetails()
            ExceptionTranslationFilter:Handles any AccessDeniedException and AuthenticationException thrown within the filter chain. 
            ConcurrentSessionFilter:determineExpiredUrl(HttpServletRequest request, SessionInformation info) 
    
    Hander相关:
    AuthenticationSuccessHandler:(接口):onAuthenticationSuccess(request,response,authentication)
        ForwardAuthenticationSuccessHandler:
        SavedRequestAwareAuthenticationSuccessHandler:
        SimpleUrlAuthenticationSuccessHandler:
     
    Event相关:
    InteractiveAuthenticationSuccessEvent 
    入口:
    AuthenticationEntryPoint:
        LoginUrlAuthenticationEntryPoint:UsernamePasswordAuthenticationFilter使用ExceptionTranslationFilter来重定向到登录页面
         commence (request,response,authException)重定向方法,getLoginFormUrl() 
    Listener相关:
    javax.servlet.http.HttpSessionListener
        HttpSessionEventPublisher: sessionCreated(javax.servlet.http.HttpSessionEvent event), 
                                        sessionDestroyed(javax.servlet.http.HttpSessionEvent event) 
    Session相关:                                
    SessionRegistry:(接口):getAllPrincipals() getAllSessions(), getSessionInformation(),registerNewSession()
        SessionRegistryImpl:
    SessionAuthenticationStrategy:(接口)A 
        CompositeSessionAuthenticationStrategySessionAuthenticationStrategy that accepts multiple SessionAuthenticationStrategy 
                    implementations to delegate to. Each SessionAuthenticationStrategy is invoked in turn. The invocations are short circuited if any exception, (i.e. SessionAuthenticationException) is thrown. 
        ConcurrentSessionControlAuthenticationStrategy:控制用户可以同时登录的数量,就是控制一个用户可以同时创建几个session
        SessionFixationProtectionStrategy:防止会话固定攻击
        RegisterSessionAuthenticationStrategy:register a user with the SessionRegistry after successful Authentication. 
    匿名认证相关:
    AuthenticationProvider
        AnonymousAuthenticationProvider:authenticate(Authentication authentication), getKey()  
    Authentication:
        AnonymousAuthenticationToken:Represents an anonymous Authentication,getPrincipal() 
    GenericFilterBean
        AnonymousAuthenticationFilter: createAuthentication(HttpServletRequest request)  
        
    
    
    public String getCurrentUsername() 
    {
    
          Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal();
    
          if (principal instanceof UserDetails) 
          {
    
             return ((UserDetails) principal).getUsername();
    
          }
    
          if (principal instanceof Principal) 
          {
    
             return ((Principal) principal).getName();
    
          }
    
          return String.valueOf(principal);
    
    }
  • 相关阅读:
    String类型作为方法的形参
    [转] 为什么说 Java 程序员必须掌握 Spring Boot ?
    Centos打开、关闭、结束tomcat,及查看tomcat运行日志
    centos中iptables和firewall防火墙开启、关闭、查看状态、基本设置等
    防火墙没有关导致外部访问虚拟机的tomcat遇到的问题和解决方法
    可以ping通ip地址,但是访问80,或者8080报错
    JAVA的非对称加密算法RSA——加密和解密
    CA双向认证的时候,如果一开始下载的证书就有问题的,怎么保证以后的交易没有问题?
    图解HTTPS协议加密解密全过程
    https单向认证服务端发送到客户端到底会不会加密?
  • 原文地址:https://www.cnblogs.com/wangyonglong/p/7347209.html
Copyright © 2011-2022 走看看