@bruceparker
Developer

Как правильно сделать аутентификацию в Spring Security?

Когда я запускаю свой проект, он должен спросить у админа его логин и пароль, лишь после того как он введет данные и если они правильные то только тогда будет доступ к остальным JSP страницам (допустим пока что у меня главная страница (allStudents.jsp). Так вот я вроде все правильно написал, но он у меня игнорит "login.jsp" и не спрашивая вход автоматический входит без логина и пароля. Можете посмотреть правильно ли я аутентификацию написал.

package adil.java.schoolmaven.config;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.annotation.Order;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.web.authentication.www.BasicAuthenticationFilter;
import org.springframework.stereotype.Component;

@Order(1)
@Configuration
@EnableWebSecurity
@Component
public class СostumWebSecurityConfigurerAdapter extends WebSecurityConfigurerAdapter {
 
    @Autowired
    private MyBasicAuthenticationEntryPoint authenticationEntryPoint;
 
    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
        auth.inMemoryAuthentication()
          .withUser("admin").password(passwordEncoder().encode("1234"))
          .authorities("ROLE_ADMIN");
    }
 
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
          .antMatchers("/allStudents").hasRole("ADMIN");
          .anyRequest().authenticated()
          .and()
          .httpBasic()
          .authenticationEntryPoint(authenticationEntryPoint);
 
        http.addFilterAfter(new CustomFilter(),
          BasicAuthenticationFilter.class);
    }
 
    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }
}

Вот мои файлы проекта может чего то не хватает
5cfe1db8b38fd559439540.png

После авторизации он должен переместить меня на страницу allStudents я же все правильно написал?
package adil.java.schoolmaven.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class  AuthorizationController{

	
	@RequestMapping(value="/admin", method = RequestMethod.GET)
	public ModelAndView adminPage() {

		ModelAndView m = new ModelAndView();
		m.addObject("title", "Вы успешно вошли");
		m.addObject("message", "home");
		m.setViewName("admin");
                
                return new ModelAndView("redirect: allStudents");
		
	}

	
	@RequestMapping(value = "/login", method = RequestMethod.POST)
	public ModelAndView login(@RequestParam(value = "error", required = false) String error, 
			@RequestParam(value = "logout", required = false) String logout) {

		ModelAndView m = new ModelAndView();
		if (error != null) {
			m.addObject("error", "Неверный логин и пароль");		
		}

		if (logout != null) {
			m.addObject("msg", "Вы успешно вышли");		
		}

		m.setViewName("login");
		 
                 return m;
	}
}
  • Вопрос задан
  • 484 просмотра
Пригласить эксперта
Ответы на вопрос 1
azerphoenix
@azerphoenix Куратор тега Java
Java Software Engineer
@Order(1)
@Configuration
@EnableWebSecurity
@Component

Я так понимаю, что у вас в файле конфигурации прописано несколько конфигов? Order(1) Order(2) и т.д.?
Поставьте точку остановки и проведите дебаг. Помню, у меня была задача, когда до второй конфигурации дело не доходило. У меня была задача сделать отдельные конфиги для админки и для фронта.

antMatchers("/allStudents").hasRole("ADMIN");
если тут вместо /allStudents указать просто /, то по идее при доступе к любому урлу будет запрошен ввод пароля
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы