编程语言
首页 > 编程语言> > java-/ j_spring_security_check HTTP错误404

java-/ j_spring_security_check HTTP错误404

作者:互联网

似乎未添加某些过滤器.
我将Spring Security 3.2.0.RELEASE与java-config一起使用.
完整项目发布于GitHub
SecurityConfig.java在这里:SecurityConfig.java

我尝试在以下位置设置过滤器:

@Override
    protected void configure(HttpSecurity http) throws Exception {
        http.csrf().disable()
                .authorizeRequests()
                .antMatchers("/app/**").hasRole("ADMIN")
                .and()
                .formLogin()
                .loginPage("/")
                .defaultSuccessUrl("/app/")
                .failureUrl("/?error=1")
                .permitAll()
                .and()
                .logout()
                .logoutSuccessUrl("/?logout");
    }

在csrf().disable()之后-但是问题没有解决…
请帮助我解决此问题,因为我可以将/ j_spring_security_check与我自己的CustomUserDetailsS​​ervice结合使用!

解决方法:

我没有使用Spring Security Java Config的经验,但是我检查了您的代码和API,看来设置登录处理URL可以让您登录:

AbstractAuthenticationFilterConfigurer.loginProcessingUrl("/j_spring_security_check")

因此,您的代码应为:

@Override
protected void configure(HttpSecurity http) throws Exception {
    http.csrf().disable()
            .authorizeRequests()
            .antMatchers("/app/**").hasRole("ADMIN")
            .and()
            .formLogin()
            .loginProcessingUrl("/j_spring_security_check")
            .loginPage("/")
            .defaultSuccessUrl("/app/")
            .failureUrl("/?error=1")
            .permitAll()
            .and()
            .logout()
            .logoutSuccessUrl("/?logout");
}

我希望这是默认设置.

另外,要使用MyCustomUserDetailsS​​ervice,而不是像现在那样自动装配(Spring创建的代理),而是手动配置它:

public class MyCustomUserDetailsService implements UserDetailsService {

    private UserDAO userDAO;

    public MyCustomUserDetailsService(UserDAO userDAO) {
        this.userDAO = userDAO;
    }
    // ...    
}

注意,没有@ Service / @ Component批注和通过Ctor注入的DAO.在安全配置中:

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    private DataSource dataSource;

    @Autowired
    private UserDAO userDAO;

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.jdbcAuthentication()
                .dataSource(dataSource)
                .and()
                .userDetailsService(new MyCustomUserDetailsService(userDAO));
    }
    // ...
}

现在,我确定UserDetailService已正确配置.并且可以肯定的是,它将在登录应用程序时使用.

我还注意到没有使用用户名和密码.这是因为在login.jsp中,您使用j_username和j_password,而username参数应该是username,而password参数应该是password.

<input type="text" id="username" class="span4" name="username" placeholder="Username" />
<input type="password" id="password" class="span4" name="password" placeholder="Password" />

查看FormLoginConfigurer类.

标签:spring-java-config,spring-security,spring,java,spring-mvc
来源: https://codeday.me/bug/20191029/1964018.html