Spring Security使用自定义表单登录

时间:2017-06-04 06:03:32

标签: java spring spring-boot spring-security

我的Spring安全配置:

@EnableWebSecurity
public class WebSecurityConfiguration extends WebSecurityConfigurerAdapter{

        @Autowired
        private ClientDetailsService clientDetailsService;

        @Autowired
        public void globalUserDetails(AuthenticationManagerBuilder auth) throws Exception {
            auth.inMemoryAuthentication()
              .withUser("username").password("password")
              .authorities("USER");
        }

        @Override
        protected void configure(HttpSecurity http) throws Exception {
            http
            .authorizeRequests()
                .anyRequest().authenticated()
                .and()
            .formLogin()
                .loginPage("/login")
                .permitAll()
                .and().csrf().disable();
        }

       ....
}

My Spring启动控制器:

@Controller
@RequestMapping("/")
public class IndexController extends BaseController {

    @RequestMapping(value = "/login", method = RequestMethod.GET)
    public String login() {
        return "login";
    } 
....
}

您好,我正在尝试使用自定义登录表单的Spring安全性。 我的问题是:

  1. 当我输入localhost:8080/login浏览器没有指向我的login.jsp时,它会弹出一个带有文本框的默认表单,输入用户名和密码。

    < / LI>
  2. 输入&#34;用户名&#34;作为用户名,&#34;密码&#34;作为密码,它返回验证失败。

  3. 追溯:

    Request '/login' matched by universal pattern '/**'
    DEBUG - matched
    DEBUG - /login at position 1 of 11 in additional filter chain; firing Filter: 'WebAsyncManagerIntegrationFilter'
    DEBUG - /login at position 2 of 11 in additional filter chain; firing Filter: 'SecurityContextPersistenceFilter'
    DEBUG - /login at position 3 of 11 in additional filter chain; firing Filter: 'HeaderWriterFilter'
    DEBUG - /login at position 4 of 11 in additional filter chain; firing Filter: 'LogoutFilter'
    DEBUG - Trying to match using Ant [pattern='/logout', GET]
    DEBUG - Checking match of request : '/login'; against '/logout'
    DEBUG - Trying to match using Ant [pattern='/logout', POST]
    DEBUG - Request 'GET /login' doesn't match 'POST /logout
    DEBUG - Trying to match using Ant [pattern='/logout', PUT]
    DEBUG - Request 'GET /login' doesn't match 'PUT /logout
    DEBUG - Trying to match using Ant [pattern='/logout', DELETE]
    DEBUG - Request 'GET /login' doesn't match 'DELETE /logout
    DEBUG - No matches found
    DEBUG - /login at position 5 of 11 in additional filter chain; firing Filter: 'BasicAuthenticationFilter'
    DEBUG - Basic Authentication Authorization header found for user 'username'
    DEBUG - Authentication attempt using org.springframework.security.authentication.dao.DaoAuthenticationProvider
    DEBUG - User 'username' not found
    DEBUG - Returning cached instance of singleton bean 'delegatingApplicationListener'
    DEBUG - Authentication request for failed: org.springframework.security.authentication.BadCredentialsException: Bad credentials
    

1 个答案:

答案 0 :(得分:-1)

看起来匿名用户无法访问/ login

http
    .authorizeRequests()
        .antMatchers("/login").anonymous()
        .anyRequest().authenticated()
        .and()
    .formLogin()
        .loginPage("/login")
        .permitAll()
        .and().csrf().disable();

而且,看起来您正在使用基本身份验证的授权标头对您的服务器发出请求。

DEBUG - Basic Authentication Authorization header found for user 'username'