zoukankan      html  css  js  c++  java
  • springsecrity入门

    UserDetailsService

    需要传入用户名,不然会报用户名为空的异常
    UsernameNotFoundException用户名没有发现异常,在loadUserByUsername中是需要通过自己的逻辑从数据库中取值,如果通过用户名没有查询到对应的数据,应该抛出UsernameNotFoundException,系统就知道用户名没有查询到

    回参是一个UserDetails

    public interface UserDetails extends Serializable {
    	// ~ Methods
    	// ========================================================================================================
    
    	/**
    	 * Returns the authorities granted to the user. Cannot return <code>null</code>.
    	 *
    	 * @return the authorities, sorted by natural key (never <code>null</code>)
    	 */
    	Collection<? extends GrantedAuthority> getAuthorities();//权限
    
    	/**
    	 * Returns the password used to authenticate the user.
    	 *
    	 * @return the password
    	 */
    	String getPassword();//密码
    
    	/**
    	 * Returns the username used to authenticate the user. Cannot return <code>null</code>.
    	 *
    	 * @return the username (never <code>null</code>)
    	 */
    	String getUsername();//用户名
    
    	/**
    	 * Indicates whether the user's account has expired. An expired account cannot be
    	 * authenticated.
    	 *
    	 * @return <code>true</code> if the user's account is valid (ie non-expired),
    	 * <code>false</code> if no longer valid (ie expired)
    	 */
    	boolean isAccountNonExpired();//用户帐户是否已过期
    
    	/**
    	 * Indicates whether the user is locked or unlocked. A locked user cannot be
    	 * authenticated.
    	 *
    	 * @return <code>true</code> if the user is not locked, <code>false</code> otherwise
    	 */
    	boolean isAccountNonLocked();//用户是否被锁定或解锁
    
    	/**
    	 * Indicates whether the user's credentials (password) has expired. Expired
    	 * credentials prevent authentication.
    	 *
    	 * @return <code>true</code> if the user's credentials are valid (ie non-expired),
    	 * <code>false</code> if no longer valid (ie expired)
    	 */
    	boolean isCredentialsNonExpired();//用户的凭据(密码)是否已过期
    
    	/**
    	 * Indicates whether the user is enabled or disabled. A disabled user cannot be
    	 * authenticated.
    	 *
    	 * @return <code>true</code> if the user is enabled, <code>false</code> otherwise
    	 */
    	boolean isEnabled();是否启动
    }
    

    UserDetails 的实现类是一个user

    具体参数这是springsecrity实现的一个类

    	private String password;
    	private final String username;
    	private final Set<GrantedAuthority> authorities;
    	private final boolean accountNonExpired;
    	private final boolean accountNonLocked;
    	private final boolean credentialsNonExpired;
    	private final boolean enabled;
    

    PasswordEncoder密码解析器

    功能就是加密密码和解析密码

    Spring Security要求容器中必须有PasswordEncoder实例.所以当自定义登录逻辑时要求必须给容器注入
    PaswordEncoder 的bean又悌。

    接口介绍

    • encode():把参数按照特定的解析规则迸行解析。
    • matches():验证从存储中荻取的编码空码与编码后提交的原始密码是否匹配。如果击码匹配,则返回
    true;如果不匹配,则返回false。第一个参数表示需要被解析的密码。第二个参数表示存储的空码。
    • upgradeEncodingO :如果解析的空码能够再次进行解析且达到更安全的结果则返回true,否则返回false.

    PasswordEncoder
    encode(CharSequence): String

    matches(CharSequence, String): boolean
    验证从存储器中获得的经过编码的密码是否与提交的原始密码匹配。
    如果密码匹配则返回true,如果不匹配则返回false。 存储的密码本身永远不会被解码。
    默认返回false。

    upgradeEncoding(String): boolean

    密码示例

            BCryptPasswordEncoder encode = new BCryptPasswordEncoder();
            //登录密码
            String loginpw = "123";
            System.out.println(loginpw);
            //数据库密码
            String userpw = encode.encode("123");
            System.out.println(userpw);
            //第一个参数是原密码
            //第二个参数就是用 PasswordEncoder 调用 encode(CharSequence rawPassword) 编码过后保存在数据库的密码。
            boolean matches = encode.matches(loginpw, userpw);
            System.out.println(matches);
    

    可以看到userpw每次生成都可以和loginpw相匹配

  • 相关阅读:
    在SharePoint 2010中,如何找回丢失的服务账号(Service Account)密码
    基于Picture Library创建的图片文档库中的上传多个文件功能(upload multiple files)报错怎么解决?
    使用PowerShell找出具体某个站点所使用的模板(Web Template)名称?
    多文档上传(upload multiple documents)功能不能使用怎么办?
    实验环境里新创建成功的web application却在浏览器中返回404错误
    SharePoint 2010中一些必须知道的限制
    Information Management Policy(信息管理策略)的使用范例
    Google云平台对于2014世界杯半决赛的预测,德国阿根廷胜!
    php 字符串分割输出
    php实现验证码(数字、字母、汉字)
  • 原文地址:https://www.cnblogs.com/rzkwz/p/15690881.html
Copyright © 2011-2022 走看看