Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring Security未授权_Spring_Spring Security - Fatal编程技术网

Spring Security未授权

Spring Security未授权,spring,spring-security,Spring,Spring Security,我一直在遵循一个指南,但我无法让Spring Security工作。 它看起来像是在进行身份验证,但没有进行授权或相反,或者没有重定向到登录成功页面。也许这是个愚蠢的错误,但我看不出来 我的spring安全配置: @Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Autowired private Environment en

我一直在遵循一个指南,但我无法让Spring Security工作。 它看起来像是在进行身份验证,但没有进行授权或相反,或者没有重定向到登录成功页面。也许这是个愚蠢的错误,但我看不出来

我的spring安全配置:

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    private Environment env;

    @Autowired
    private UserSecurityService userSecurityService;

    private static final String[] PUBLIC_MATCHERS = { 
        "/webjars/**", 
        "/css/**", 
        "/js/**", 
        "/images/**", 
        "/",
        "/about/**", 
        "/contact/**", 
        "/error/**/*",
        "/h2-console/**"
    };

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        List<String> activeProfiles = Arrays.asList(env.getActiveProfiles());
        // Required by h2 console to work
        if(activeProfiles.contains("dev")) {
            http.csrf().disable();
            http.headers().frameOptions().disable();
        }
        http
            .authorizeRequests()
            .antMatchers(PUBLIC_MATCHERS).permitAll()
            .anyRequest().authenticated()
            .and()
            .formLogin().loginPage("/login").defaultSuccessUrl("/payload")
            .failureUrl("/login?error").permitAll()
            .and()
            .logout().permitAll();
    }

    @Autowired
    public void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.userDetailsService(userSecurityService);   
    }    
}
日志:

调试o.s.s.w.a.i.FilterSecurityInterceptor-以前经过身份验证:org.springframework.security.authentication。AnonymousAuthenticationToken@2dafa81d:委托人:匿名用户;凭据:[受保护];认证:正确;详细信息:org.springframework.security.web.authentication。WebAuthenticationDetails@2cd90:RemoteIP地址:0:0:0:0:0:0:0:0:1;会话ID:0D60174BBA25377F65443D95DB72F713;授予的权限:角色\u匿名

调试o.s.s.access.vote.AffirmativeBased-投票者:org.springframework.security.web.access.expression。WebExpressionVoter@7a27baf6,返回时间:1

调试o.s.s.w.a.i.FilterSecurityInterceptor-授权成功

调试o.s.s.w.a.i.FilterSecurityInterceptor-RunAsManager未更改身份验证对象

调试o.s.security.web.FilterChainProxy-/js/scripts.js到达附加过滤器链的末尾;继续使用原始链

调试o.s.s.w.c.HttpSessionSecurityContextRepository-SecurityContext为空或内容为匿名-上下文将不会存储在HttpSession中

调试o.s.s.w.a.例外TranslationFilter-链处理正常

调试o.s.s.w.c.SecurityContextPersistenceFilter-随着请求处理完成,SecurityContextHolder现在已清除

调试o.s.s.w.c.HttpSessionSecurityContextRepository-SecurityContext为空或内容为匿名-上下文将不会存储在HttpSession中

调试o.s.s.w.a.例外TranslationFilter-链处理正常

调试o.s.s.w.c.SecurityContextPersistenceFilter-随着请求处理完成,SecurityContextHolder现在已清除


在身份验证期间,应用程序抛出以下错误:

java.lang.IllegalArgumentException: There is no PasswordEncoder mapped for the id "null"
引发此异常,因为提供的纯文本密码缺少密码编码器{id}-前缀。Spring Security 5现在使用以下格式存储密码—以前版本的Spring Security并非如此:

{id}encodedPassword
这意味着对于纯文本密码,{noop}id告诉spring使用NoOpPasswordEncoder匹配密码,NoOpPasswordEncoder基本上将密码作为纯文本处理

然而,存储纯文本密码是非常不鼓励的,尽管它可能对自动化测试有用

改用密码编码器 强烈建议使用BCryptPasswordEncoder、Pbkdf2PasswordEncoder或SCryptPasswordEncoder

BCryptPasswordEncoder

安全配置

对密码进行编码

支持多个编码器 要支持多个编码器,可能需要查看和


有关更多详细信息,请查看验证期间应用程序抛出以下错误:

java.lang.IllegalArgumentException: There is no PasswordEncoder mapped for the id "null"
引发此异常,因为提供的纯文本密码缺少密码编码器{id}-前缀。Spring Security 5现在使用以下格式存储密码—以前版本的Spring Security并非如此:

{id}encodedPassword
这意味着对于纯文本密码,{noop}id告诉spring使用NoOpPasswordEncoder匹配密码,NoOpPasswordEncoder基本上将密码作为纯文本处理

然而,存储纯文本密码是非常不鼓励的,尽管它可能对自动化测试有用

改用密码编码器 强烈建议使用BCryptPasswordEncoder、Pbkdf2PasswordEncoder或SCryptPasswordEncoder

BCryptPasswordEncoder

安全配置

对密码进行编码

支持多个编码器 要支持多个编码器,可能需要查看和


有关更多详细信息,请查看

身份验证过程确实会引发错误。尽管被否决不是我的错,尽管这是合理的,但我认为这个问题可能会对来自spring security的人特别有用,因为身份验证过程确实会抛出错误。虽然被否决的不是我,虽然是合理的,但我认为这个问题可能对来自spring security的人特别有用
@Configuration
class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    PasswordEncoder passwordEncoder;

    ...

    @Autowired
    public void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.userDetailsService(userSecurityService)
            .passwordEncoder(passwordEncoder);
    }
}
@Service
class UserService implements UserDetailsService {
    private UserRepository userRepository;
    private PasswordEncoder passwordEncoder;

    UserService(UserRepository userRepository, PasswordEncoder passwordEncoder) {
        this.userRepository = userRepository;
        this.passwordEncoder = passwordEncoder;
    }    

    User createUser(String username, String password) {
        // encrypt the plain-text password
        String encodedPassword = passwordEncoder.encode(password);
        User user = new User(username, encodedPassword));
        //...
        return userRepository.save(user);
    }
}