0

WebSecurityConfig.javaSpring Security с загрузочного JDBC Аннотация

@Configuration 
@EnableWebSecurity 
public class WebSecurityConfig extends WebSecurityConfigurerAdapter{ 

    @Autowired 
    DataSource dataSource; 

    @Override 
    protected void configure(HttpSecurity http) throws Exception { 
     http.authorizeRequests().antMatchers("/css/**", "/icons/**", "/js/**", "/images/**").permitAll(); 
     http.authorizeRequests().antMatchers("/bootstrap/**", "/icons/**", "/datatables/**", "/jquery/**", 
       "/font-awesome/**", "/select2/**").permitAll(); 
     http.authorizeRequests().antMatchers("/", "/") 
           .permitAll() 
           .anyRequest() 
           .authenticated() 
           .and().formLogin() 
           .loginPage("/userForm") 
           .usernameParameter("userName").passwordParameter("password") 
           .defaultSuccessUrl("/login") 
           .failureUrl("/userForm") 
           .permitAll().and() 
           .logout().logoutUrl("/logout") 
           .logoutSuccessUrl("/logout").permitAll(); 
    } 

    @Autowired 
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception { 
     auth.jdbcAuthentication().dataSource(dataSource) 
      .usersByUsernameQuery(
       "select username, password, active_status from bgtool_test_users where username = ? and active_status = 'Y'") 
      .authoritiesByUsernameQuery(
        "select username, role from bgtool_test_users where username = ?") 
      .passwordEncoder(passwordEncoder()) 
      ; 
    } 

    @Bean 
    public PasswordEncoder passwordEncoder() { 
     return new BCryptPasswordEncoder(); 
    } 
} 

UserController.java

@Controller 
public class UserController { 
private final Logger logger = LoggerFactory.getLogger(UserController.class); 

@Autowired 
private GameFacade gameFacade; 

@RequestMapping("/userList") 
public String list(Model model) { 
    List<User> users = gameFacade.findAllUsers(); 

    model.addAttribute("users", users); 
    logger.debug("Users: {}", users); 

    return "userList"; 
} 

@RequestMapping(value = "/userForm", method = RequestMethod.GET) 
public String userForm(Model model) { 

    User entry = new User(); 
    model.addAttribute("userLogin", entry); 
    logger.debug("Login Form"); 
    return "loginForm"; 
} 

@RequestMapping(value = "/login", method = RequestMethod.POST) 
public String login(@Valid @ModelAttribute("userLogin") User entry, BindingResult result, Model model) { 
    System.out.println("setting status N"); 
    if (result.hasErrors()) { 
     logger.debug("Login Form validation error"); 
     return "loginForm"; 
    } else { 
     entry = gameFacade.findUserByName(entry.getUserName(), entry.getPassword()); 
     if (entry == null) { 
      result.rejectValue("password", "error.userLogin", "Username or Password incorrect !!"); 
      return "loginForm"; 
     } 
     logger.debug("Login Successful", entry); 
     return "home"; 
    } 
} 

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
<modelVersion>4.0.0</modelVersion> 

<groupId>frau</groupId> 
<artifactId>bgtweb</artifactId> 
<packaging>jar</packaging> 
<version>1.0.0-SNAPSHOT</version> 

<parent> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-parent</artifactId> 
    <version>1.4.0.RELEASE</version> 
</parent> 

<properties> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    <java.version>1.8</java.version> 
    <derby.version>10.12.1.1</derby.version> 
</properties> 

<dependencies> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-thymeleaf</artifactId> 
    </dependency> 

    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-data-jpa</artifactId> 
    </dependency> 

    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-devtools</artifactId> 
    </dependency> 

    <dependency> 
     <groupId>commons-dbcp</groupId> 
     <artifactId>commons-dbcp</artifactId> 
     <version>${commons-dbcp.version}</version> 
    </dependency> 

    <dependency> 
     <groupId>org.apache.derby</groupId> 
     <artifactId>derbyclient</artifactId> 
     <version>${derby.version}</version> 
     <scope>runtime</scope> 
    </dependency> 

<!-- SPRING SECURITY --> 
     <dependency> 
       <groupId>org.springframework.security</groupId> 
       <artifactId>spring-security-web</artifactId> 
     </dependency> 
     <dependency> 
       <groupId>org.springframework.security</groupId> 
       <artifactId>spring-security-config</artifactId> 
     </dependency> 
     <dependency> 
       <groupId>org.springframework.boot</groupId> 
       <artifactId>spring-boot-starter-security</artifactId> 
     </dependency> 

     <!-- https://mvnrepository.com/artifact/org.springframework.security/spring-security-core --> 
     <dependency> 
       <groupId>org.springframework.security</groupId> 
       <artifactId>spring-security-core</artifactId> 
     </dependency> 


</dependencies> 

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-maven-plugin</artifactId> 
     </plugin> 

     <plugin> 
      <groupId>org.jheinzel.maven</groupId> 
      <artifactId>derby-maven-plugin</artifactId> 
      <version>1.0</version> 
      <configuration> 
       <derbyHome>${project.basedir}/data</derbyHome> 
       <port>1527</port> 
       <database>EMDb</database> 
      </configuration> 
     </plugin> 

    </plugins> 
</build> 

</project> 

Когда я пытаюсь войти в систему, я перенаправляюсь обратно на страницу входа в систему. Метод контроллера для сопоставления «/ login» не вызван, поскольку я не получаю свои сообщения в журнале о том же методе в консоли. Я проверил SQL-запросы. Они верны. Я не могу найти то, чего не хватает. Любая помощь приветствуется. Спасибо заранее

+0

ли еще ждать этот вопрос ответ? –

+0

@SergiiGetman: Да, я все еще сталкиваюсь с такой же ошибкой даже после изменения URL-адреса. –

+0

@SergiiGetman: Добавлен контроллер и pom.xml для более подробной информации. Не могли бы вы посмотреть на это. –

ответ

1

Ваш Логин URL страницы и успех URL по умолчанию тот же:

.loginPage("/userForm").usernameParameter("userName").passwordParameter("password") 
.defaultSuccessUrl("/userForm") 

ли вы понять логическую цепочку Spring Security? Вы объявляете страницы для каждого этапа аутентификации, настраиваете поставщик проверки подлинности, который проверяет ваше имя пользователя и пароль. это его. Таким образом, существует две возможные ошибки: ваше сопоставление (страницы и контроллер) и ваша БД (jdbcAuthentication()).

Вам не нужен контроллер - только страницы и и конфиг безопасности. попробуйте упростить пример и удалить контроллер и отладки JDBC аутентификации

Этот example показать правильный путь конфигурации

+0

Спасибо. Он решил мою ошибку. –

+0

Теперь я использую два разных URL-адреса для входа в систему и successurl. Но после успешного входа в систему, когда я нажимаю на ссылку на главной странице, она перенаправляется на страницу входа в систему. –

+0

вам нужно проверить другие аспекты вашей конфигурации безопасности, возможно, вы не заполняете SecurityContext аутентификацией, поэтому вы не аутентифицированы и не логически перенаправлены на страницу входа. проверьте эту ссылку, но это другой вопрос по сравнению с вашей основной проблемой http://docs.spring.io/spring-security/site/docs/current/reference/htmlsingle/#jc-authentication –

Смежные вопросы