Форум программистов, компьютерный форум, киберфорум
Java EE (J2EE)
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.96/25: Рейтинг темы: голосов - 25, средняя оценка - 4.96
0 / 0 / 1
Регистрация: 06.10.2015
Сообщений: 70
1

Spring Security login post not supported

27.03.2017, 02:21. Показов 4490. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравстуйте. ***-ый день бьюсь в проекте с тем, что не могу сделать нормальный sign in в систему, не получается объяснить spring, что делать.
Java
1
2
3
4
5
6
7
8
9
10
11
http.formLogin()
                // указываем страницу с формой логина
                .loginPage( "/login" ).defaultSuccessUrl( "/login?success" )
                // указываем action с формы логина
                .loginProcessingUrl( "/login" )
                // указываем URL при неудачном логине
                .failureUrl( "/login?error" )
                // Указываем параметры логина и пароля с формы логина
                .usernameParameter( "login" ).passwordParameter( "password" )
                // даем доступ к форме логина всем
                .permitAll();
хочу, чтобы после того, как данные входа подтвердятся, он переходил по url "login?success", где его уже ждет
Java
1
2
3
4
5
6
7
@RequestMapping( value = { "/login?success" }, method = RequestMethod.GET )
    public String loginSuccess( Model model ){
        User user = ( User ) org.springframework.security.core.context.SecurityContextHolder.getContext().getAuthentication().getPrincipal();
        model.addAttribute( "principalLogin", user.getLogin() );
        model.addAttribute( "principalRole", user.getRole().name() );
        return "index";
    }
как я понимаю, логин должен прилетать сюда
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
@Override
    public Optional<User> getUserByLogin( String login ){
 
//        Для тестирования ненайденного пользователя
        if( login.equals( "anon" ) )
            return Optional.empty();
 
        // TODO: 21.03.17 Брать пользователя из БД
        User user = new User();
        user.setLogin( login );
        user.setName( "name" );
        user.setLastName( "lastName" );
        // TODO: 21.03.17 Salt by user id
        user.setPassword( passwordEncoder.encodePassword( "1234", null ) );
        switch( login ){
            case "admin":
                user.setRole( UserRoles.ADMIN );
                break;
            case "user":
                user.setRole( UserRoles.USER );
                break;
 
            default:
                user.setRole( UserRoles.ANONYMOUS );
        }
        // TODO: 24.03.17 Fix
        user.setSurveys( surveyService.getListSurveys() );
        return Optional.of( user );
    }
, где создается пользователь с введенным именем, его пароль 1234.
НО! как я ни стараюсь, по ссылке мне выдает, что метод пост не поддерживается ( правильно, в контроллере же его нет, но я думал spring security сам создает такой контроллер в настройках ).
Если что, весь код проекта здесь https://github.com/GordPavel/Survey/tree/Gordeev
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.03.2017, 02:21
Ответы с готовыми решениями:

Spring Security Как реализовать login контроллер
При аутентификации пользователя я получаю куки, который я использую для авторизации и дальнейшего...

Spring security custom login page error
день добрый. есть небольшие косяки с работой спринг секюрити. при заллогивании через...

Spring security: Pre/Post Authorize
Добавляю security к своему REST'ful веб сервису, настроил следующим образом: @Configuration...

Spring MVC+Thymeleaf ошибка редактирования записи "Request method 'POST' not supported"
Всем доброго времени суток! Прошу помощи по следующей проблеме: Есть табличка с записями БД,...

12
Эксперт Java
378 / 370 / 114
Регистрация: 30.06.2010
Сообщений: 1,445
27.03.2017, 05:57 2
как и что на сервер постишь?
0
0 / 0 / 1
Регистрация: 06.10.2015
Сообщений: 70
27.03.2017, 07:10  [ТС] 3
LeX, mavenом собираю package, сервер tomcat, захожу через localhost/manager и там заливаю war
0
Эксперт Java
378 / 370 / 114
Регистрация: 30.06.2010
Сообщений: 1,445
27.03.2017, 08:19 4
Paevl, при авторизации что постишь?
0
0 / 0 / 1
Регистрация: 06.10.2015
Сообщений: 70
27.03.2017, 10:44  [ТС] 5
LeX, что ты имеешь ввиду? Что пишу в поля ввода при авторизации? admin, 1234
0
Эксперт Java
378 / 370 / 114
Регистрация: 30.06.2010
Сообщений: 1,445
30.03.2017, 07:46 6
Цитата Сообщение от Paevl Посмотреть сообщение
.loginProcessingUrl( "/login" )
попробуй сделать /api/login и соответственно с клиента постить данные именно на него
0
0 / 0 / 1
Регистрация: 06.10.2015
Сообщений: 70
30.03.2017, 11:30  [ТС] 7
LeX, 404 Not Found
The origin server did not find a current representation for the target resource or is not willing to disclose that one exists.
Видимо потому что нет контроллера в IndexController на /api/login
0
Эксперт Java
378 / 370 / 114
Регистрация: 30.06.2010
Сообщений: 1,445
30.03.2017, 19:04 8
Цитата Сообщение от Paevl Посмотреть сообщение
Видимо потому что нет контроллера в IndexController на /api/login
он не нужен.
Цитата Сообщение от Paevl Посмотреть сообщение
.loginProcessingUrl( "/api/login" )
это url внутреннего апи спринга, куда через POST отправляются данные аутентификации
Цитата Сообщение от Paevl Посмотреть сообщение
.defaultSuccessUrl( "/login?success" )
при удаче сюда будет редирект, поэтому через ajax без доработки сервера данные аутентификации слать не надо. надо делать POST из формы
и да, лучше перенаправлять куда-либо, но не на login?success
0
0 / 0 / 1
Регистрация: 06.10.2015
Сообщений: 70
30.03.2017, 19:13  [ТС] 9
LeX, я понимаю, что это должно так быть, но почему-то это не срабатывает. Я нашёл проект, в котором так и работает - за весь день не нашёл разницы в конфигурациях. ������*♂️
0
Эксперт Java
378 / 370 / 114
Регистрация: 30.06.2010
Сообщений: 1,445
30.03.2017, 19:41 10
показывай свою конфигурацию, что уходит в POST на сервер и ошибку
0
0 / 0 / 1
Регистрация: 06.10.2015
Сообщений: 70
30.03.2017, 22:33  [ТС] 11
LeX,
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
package ru.ssau.config;
 
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.authentication.encoding.ShaPasswordEncoder;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
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 ru.ssau.service.secure.UserDetailsServiceImpl;
 
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity( securedEnabled = true )
public class SecurityConfig extends WebSecurityConfigurerAdapter{
 
    @Autowired
    private UserDetailsServiceImpl userDetailsService;
 
    // регистрируем нашу реализацию UserDetailsService
    // а также PasswordEncoder для приведения пароля в формат SHA1
    @Autowired
    public void registerGlobalAuthentication( AuthenticationManagerBuilder auth ) throws Exception{
        auth.userDetailsService( userDetailsService ).passwordEncoder( getShaPasswordEncoder() );
    }
 
    @Override
    protected void configure( HttpSecurity http ) throws Exception{
        http.csrf().disable().authorizeRequests().antMatchers( "/resources/**",
                                                               "/**" ).permitAll().anyRequest().permitAll().and();
 
        http.formLogin().loginPage( "/login" ).loginProcessingUrl( "/j_spring_security_check" ).failureUrl(
                "/login?error" ).usernameParameter( "username" ).passwordParameter( "password" ).permitAll();
 
        http.logout().permitAll().logoutUrl( "/logout" ).logoutSuccessUrl( "/login?logout" ).invalidateHttpSession(
                true );
    }
 
    // Указываем Spring контейнеру, что надо инициализировать <b></b>ShaPasswordEncoder
    // Это можно вынести в WebAppConfig, но для понимаемости оставил тут
    @Bean
    public ShaPasswordEncoder getShaPasswordEncoder(){
        return new ShaPasswordEncoder();
    }
}
XML
1
2
3
4
5
6
7
8
9
<div class="container" style="width: 300px;">
    <c:url value="/j_spring_security_check" var="loginUrl" />
    <form action="${loginUrl}" method="post">
        <h2 class="form-signin-heading">Please sign in</h2>
        <input type="text" class="form-control" name="username" placeholder="Email address" required autofocus value="colibri">
        <input type="password" class="form-control" name="password" placeholder="Password" required value="1234">
        <button class="btn btn-lg btn-primary btn-block" type="submit">Войти</button>
    </form>
</div>
HTTP Status 404 – Not Found

Type Status Report

Description The origin server did not find a current representation for the target resource or is not willing to disclose that one exists.

Apache Tomcat/8.5.12
0
Эксперт Java
378 / 370 / 114
Регистрация: 30.06.2010
Сообщений: 1,445
30.03.2017, 22:44 12
сниффер (например fiddler) какие данные показывает при POST запросе?
0
0 / 0 / 1
Регистрация: 06.10.2015
Сообщений: 70
31.03.2017, 16:26  [ТС] 13
LeX, посмотрел в chrome, что он отправляет
Request URL:http://localhost:8080/survey/j... rity_check
Request Method:POST
Status Code:404
Remote Address:[::1]:8080
Response Headers
view source
Content-Language:en
Content-Length:1047
Content-Type:text/html;charset=utf-8
Date:Fri, 31 Mar 2017 13:23:36 GMT
Request Headers
view source
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding:gzip, deflate, br
Accept-Language:ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4
Cache-Control:max-age=0
Connection:keep-alive
Content-Length:28
Content-Type:application/x-www-form-urlencoded
Cookie:JSESSIONID=9E626BBE5116A77DE53FEBA94E8B4A09
Host:localhost:8080
Origin:http://localhost:8080
Referer:http://localhost:8080/survey/login
Upgrade-Insecure-Requests:1
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.95 Safari/537.36
Form Data
view source
view URL encoded
username:admin
password:1234
0
31.03.2017, 16:26
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
31.03.2017, 16:26
Помогаю со студенческими работами здесь

Jetty embedded + Spring MVC + Spring Security
Добрый день. По роду работы приходилось писать на JavaSE, в том числе и сложные клиент/серверные...

Spring. Тесты и Spring-security
Вопрос из области почему так. Есть у меня такой вот тест: @ContextConfiguration(locations =...

[Spring MVC] Login Bean
В одном из туториалов по Spring MVC авторы используют LoginBean со следующим содержанием: ...

Request method 'POST' not supported
Всем доброе утро! помогите пож. кто может. Суть у меня есть контроллер ContractsController.class ...

Spring security
Пытаюсь сделать spring MVC + spring security. При запуске пишет Type Exception Report Message No...

Spring Security
Добрый день. Использую SpringSecurity: protected void configure(HttpSecurity http) throws...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru