Форум программистов, компьютерный форум, киберфорум
Java: Spring, Spring Boot
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
1 / 1 / 0
Регистрация: 09.01.2019
Сообщений: 76

Почему не работает Bcrypt в Spring Security

19.08.2019, 09:53. Показов 1809. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В Security Config вроде написал код для Bcrypt, но Томкат ругается


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
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
 
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
                .antMatchers("/admin/**").hasRole("ADMIN")
                .antMatchers("/user/**").hasRole("USER")
                .antMatchers("/**").permitAll()
                .and()
                .formLogin()
                .loginPage("/login")
                .defaultSuccessUrl("/allStudents")
                .and()
                .logout()
                .and()
                .csrf().disable();
    }
 
@Bean
public PasswordEncoder customPasswordEncoder() {
    return new PasswordEncoder() {
        @Override
        public String encode(CharSequence rawPassword) {
            return BCrypt.hashpw(rawPassword.toString(), BCrypt.gensalt(4));
        }
        @Override
        public boolean matches(CharSequence rawPassword, String encodedPassword) {
            return BCrypt.checkpw(rawPassword.toString(), encodedPassword);
        }
    };
}
 
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
19.08.2019, 09:53
Ответы с готовыми решениями:

Почему spring security не выполняет своих обязятельств?
Здравствуйте. Помогите, пожалуйста, решить следующую проблему. Пытаюсь поднять spring security Его конфигурация ...

Не работает Spring security
пытаюсь реализовать spring-security. При аутентификации я обращаюсь к базе данных, где проверяю логин и пароль в контроллере. в role...

Не работает Spring Security
Имеется приложение в которое пытаюсь добавить Spring Security. Действия: 1. Добавил в проект security-context.xml <?xml...

4
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
19.08.2019, 11:12
да нахрен вы текст скриншотами вставляете?! где логика?
Цитата Сообщение от Fallen1999 Посмотреть сообщение
new PasswordEncoder() {
* * * * @Override
* * * * public String encode(CharSequence rawPassword) {
* * * * * * return BCrypt.hashpw(rawPassword.toString(), BCrypt.gensalt(4));
* * * * }
* * * * @Override
* * * * public boolean matches(CharSequence rawPassword, String encodedPassword) {
* * * * * * return BCrypt.checkpw(rawPassword.toString(), encodedPassword);
* * * * }
* * };
вот это все зачем?
https://www.mkyong.com/spring-... g-example/
0
1 / 1 / 0
Регистрация: 09.01.2019
Сообщений: 76
19.08.2019, 13:09  [ТС]
Такую же ошибку выдает
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
19.08.2019, 15:29
в бд возможно какие-то кривые данные лежат
0
1 / 1 / 0
Регистрация: 09.01.2019
Сообщений: 76
20.08.2019, 07:29  [ТС]
Можешь посмотреть код вроде бы все правильно написал где может быть ошибка, в базе все хорошо


Security Config
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
    @Configuration
    @EnableWebSecurity
    public class SecurityConfig extends WebSecurityConfigurerAdapter {
    
        @Override
        protected void configure(HttpSecurity http) throws Exception {
            http.authorizeRequests()
                    .antMatchers("/admin/**").hasRole("ADMIN")
                    .antMatchers("/user/**").hasRole("USER")
                    .antMatchers("/**").permitAll()
                    .and()
                    .formLogin()
                    .loginPage("/login")
                    .defaultSuccessUrl("/allStudents")
                    .and()
                    .logout()
                    .and()
                    .csrf().disable();
        }
    
     @Bean
public PasswordEncoder customPasswordEncoder() {
    return new PasswordEncoder() {
        @Override
        public String encode(CharSequence rawPassword) {
            return BCrypt.hashpw(rawPassword.toString(), BCrypt.gensalt(4));
        }
        @Override
        public boolean matches(CharSequence rawPassword, String encodedPassword) {
            return BCrypt.checkpw(rawPassword.toString(), encodedPassword);
        }
    };
}
    
    }


Admin Controller
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
    @Controller
    @RequestMapping("/admin")
    public class AdminController {
    
        @Autowired
        private StudentService studentService;
        @Autowired
        private UserService userService;
    
        @GetMapping("/allStudentsAdmin")
        public ModelAndView allStudentsForUser() {
            ModelAndView mv = new ModelAndView();
            List<Student> studentList = studentService.getAllStudents();
            mv.addObject("studentList", studentList);
            mv.setViewName("allStudentsAdmin");
            return mv;
        }
    
        @GetMapping(value = "/deleteStudent/{id}")
        public ModelAndView deleteUserById(@PathVariable Long id) {
            studentService.deleteStudentById(id);
            ModelAndView mv = new ModelAndView("redirect:/admin/allStudentsAdmin");
            return mv;
        }
    
        @GetMapping(value = "/editStudent/{id}")
        public ModelAndView displayEditUserForm(@PathVariable Long id) {
            ModelAndView mv = new ModelAndView("adminEditStudent");
            Student student = studentService.getStudentById(id);
            mv.addObject("headerMessage", "Редактирование студента");
            mv.addObject("student", student);
            return mv;
        }
    
        @PostMapping(value = "/editStudent")
        public String saveEditedUser(
        @RequestParam("id") Long id,
        @RequestParam("name") String name,
        @RequestParam("surname") String surname,
        @RequestParam("avatar") MultipartFile file) {
            try {
                studentService.updateStudent(name, surname, file, studentService.getStudentById(id));
            } catch (FileSystemException ex) {
                ex.printStackTrace();
            } catch (IOException e) {
                return "redirect:/errors";
            }
    
            return "redirect:/admin/allStudentsAdmin";
        }
    
        @GetMapping(value = "/addStudentAdmin")
        public ModelAndView displayNewUserForm() {
            ModelAndView mv = new ModelAndView("addStudentAdmin");
            mv.addObject("headerMessage", "Add Student Details");
            mv.addObject("student", new Student());
            return mv;
        }
    
        @PostMapping(value = "/addStudentAdmin")
        public String saveNewStudent(@RequestParam("name") @NonNull String name,
        @RequestParam("surname") @NonNull String surname,
        @RequestParam("avatar") MultipartFile file)
        throws IOException {
    
            Student student = new Student();
            student.setSurname(surname);
            student.setName(name);
    
            if (file != null && !file.isEmpty()) {
                student.setAvatar(studentService.saveAvatarImage(file).getName());
            }
            studentService.saveStudent(student);
            return "redirect:/admin/allStudentsAdmin";
        }
    
        @GetMapping(value = "/addUser")
        public ModelAndView displayAddUserForm() {
            ModelAndView mv = new ModelAndView("addUser");
    
            mv.addObject("user", new User());
            return mv;
        }
    
        @PostMapping(value = "/addUser", consumes = "multipart/form-data")
        public String saveNewUser(@ModelAttribute User user) {
            userService.saveUser(user);
            return "redirect:/admin/allUsers";
        }
    
        @GetMapping("/allUsers")
        public ModelAndView allUsers(@ModelAttribute User user) {
            ModelAndView mv = new ModelAndView("allUsers");
            List<User> users = userService.getAll();
            mv.addObject("users", users);
            return mv;
        }
    
        @GetMapping("/editUser/{id}")
        public ModelAndView editUser(@PathVariable Long id) {
            Optional<User> user = userService.findUser(id);
            if (user.isPresent()) {
                ModelAndView mv = new ModelAndView("editUser");
                mv.addObject("user", user.get());
                return mv;
            }
            return new ModelAndView("redirect:/admin/allUsers");
        }
    
        @PostMapping("/editUser")
        public String saveEditedUser(@ModelAttribute User user) {
            userService.updateUser(user);
            return "redirect:/admin/allUsers";
        }
        
        
         @GetMapping(value = "/deleteUser/{id}")
        public ModelAndView deleteClientById(@PathVariable Long id) {
            userService.deleteAccountById(id);
            ModelAndView mv = new ModelAndView("redirect:/admin/allUsers");
            return mv;
        }
    }


UserService
Java
1
2
3
4
5
6
7
8
9
10
11
    public interface UserService {
        User saveUser(User user);
        List<User> getAll();
    
        Optional<User> findUser(Long id);
    
        User updateUser(User user);
        
        boolean deleteAccountById(Long id);
    
    }
UserServiceImpl

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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
    @Service
    @Transactional
    public class UserServiceImpl implements UserService {
    
        @Autowired
        private UserRepository repository;
    
    
        @Autowired
        public UserServiceImpl(UserRepository repository) {
            super();
            this.repository = repository;
        }
    
        @Override
        public List<User> getAll() {
            return (List<User>) repository.findAll();
        }
    
        @Override
        public Optional<User> findUser(Long id) {
            return repository.findById(id);
        }
    
        @Override
        public User saveUser(User user) {
            return repository.save(user);
        }
        
        @Override
        public boolean deleteAccountById(Long id) {
            try {
                repository.deleteById(id);
                return true;
            } catch (Exception ex) {
                return false;
            }
    
        }
    
        @Override
        public User updateUser(User user) {
            User targetUser = repository.findById(user.getId()).get();
    
            if (user.getLogin() != null) {
                targetUser.setLogin(user.getLogin());
            }
    
            if (user.getRole() != null) {
                targetUser.setRole(user.getRole());
            }
            
            if (user.getPassword() != null) {
                targetUser.setPassword(user.getPassword());
                
            }
            return repository.save(targetUser);
        
    
        }
    }
User.JAVA
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
    @Entity
    @Table(name = "users")
    public class User implements Serializable, UserDetails {
    
        @Id
        @GeneratedValue
        private Long id;
    
        private String login;
        private String password;
        private String role;
        public Long getId() {
            return id;
        }
    
        public void setId(Long id) {
            this.id = id;
        }
    
        public void setId(long id) {
            this.id = id;
        }
    
        public String getLogin() {
            return login;
        }
    
        public void setLogin(String login) {
            this.login = login;
        }
    
        @Override
        public Collection<? extends GrantedAuthority> getAuthorities() {
            return Collections.singleton(new SchoolAuthority(role));
        }
    
        @Override
        public String getPassword() {
            return password;
        }
    
        @Override
        public String getUsername() {
            return login;
        }
    
        @Override
        public boolean isAccountNonExpired() {
            return true;
        }
    
        @Override
        public boolean isAccountNonLocked() {
            return true;
        }
    
        @Override
        public boolean isCredentialsNonExpired() {
            return true;
        }
    
        @Override
        public boolean isEnabled() {
            return true;
        }
    
        public void setPassword(String password) {
            this.password = password;
        }
    
        public String getRole() {
            return role;
        }
    
        public void setRole(String role) {
            this.role = role;
        }
    
        class SchoolAuthority implements GrantedAuthority {
    
            String role;
    
            public SchoolAuthority(String role) {
                this.role = role;
            }
    
            @Override
            public String getAuthority() {
                return role;
            }
        }
    
        @Override
        public String toString() {
            return "User{" +
            "id=" + id +
            ", login='" + login + '\'' +
            ", password='" + password + '\'' +
            ", role='" + role + '\'' +
            '}';
        }
    }


Authorization Controller
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
    @Controller
    public class AuthorizationController {
    
        private static final String ROLE_ADMIN = "ROLE_ADMIN";
        private static final String ROLE_USER = "ROLE_USER";
        @Autowired
        StudentService studentService;
    
        @RequestMapping(value = "/login", method = RequestMethod.GET)
        public String loginPage(@RequestParam(value = "error", required = false) String error,
                @RequestParam(value = "logout", required = false) String logout,
                Model model) {
            String errorMessage = null;
            if (error != null) {
                errorMessage = "Username or Password is incorrect !!";
            }
            if (logout != null) {
                errorMessage = "You have been successfully logged out !!";
            }
            model.addAttribute("errorMessage", errorMessage);
            return "login";
        }
    
        @RequestMapping(value = "/logout", method = RequestMethod.GET)
        public String logoutPage(HttpServletRequest request, HttpServletResponse response) {
            Authentication auth = SecurityContextHolder.getContext().getAuthentication();
            if (auth != null) {
                new SecurityContextLogoutHandler().logout(request, response, auth);
            }
            return "redirect:/";
        }
    
        @RequestMapping(value = {"/allStudents", "/"},  method = {RequestMethod.GET, RequestMethod.POST})
        public ModelAndView displayAllStudents() {
            Collection<? extends GrantedAuthority> authorities = SecurityContextHolder.getContext().getAuthentication()
                    .getAuthorities();
            if(containRole(authorities, ROLE_ADMIN)){
                return new ModelAndView("redirect:/admin/allStudentsAdmin");
            }
            if(containRole(authorities, ROLE_USER)){
                return new ModelAndView("redirect:/user/allStudentsUser");
            }
            ModelAndView mv = new ModelAndView("allStudents");
            mv.addObject("studentList", studentService.getAllStudents());
            return mv;
        }
    
        @GetMapping("/addStudent")
        public ModelAndView editStudent(){
            Collection<? extends GrantedAuthority> authorities = SecurityContextHolder.getContext().getAuthentication()
                    .getAuthorities();
            if(containRole(authorities, ROLE_ADMIN)){
                return new ModelAndView("redirect:/admin/addStudentAdmin");
            }
            if(containRole(authorities, ROLE_USER)){
                return new ModelAndView("redirect:/user/addStudentUser");
            }
            ModelAndView mv = new ModelAndView("allStudents");
            mv.addObject("studentList", studentService.getAllStudents());
            return mv;
        }
    
        private boolean containRole(Collection<? extends GrantedAuthority> authorities, String role){
            for (GrantedAuthority grantedAuthority : authorities) {
                if (grantedAuthority.getAuthority().equals(role)) {
                    return true;
                }
            }
            return false;
        }
    }

AddUser.JSP
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
    <body>
    
    <div class="add">
        <br>
        <br>
        <br>
    
        <br>
        <center>
            <form:form method="POST" action="${pageContext.request.contextPath}/admin/addUser"
                       enctype="multipart/form-data">
                <table>
                    <tr>
                        <td><label path="Login">Login</label></td>
                        <td><input type="text" name="login"/></td>
                    </tr>
                    <tr>
                        <td><label path="Password">Password</label></td>
                        <td><input type="text" name="password"/></td>
                    </tr>
                    <tr>
                        <td><label path="Role">Выберите роль</label></td>
                        <td>
                            <select path="role" name="role" required>
                                <option>ROLE_ADMIN</option>
                                <option selected>ROLE_USER</option>
                            </select>
                        </td>
    
    
                        <td><input class="btn btn-primary" type="submit" value="Submit"></td>
                    </tr>
    
                </table>
            </form:form>
        </center>
    </div>
    </body>
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
20.08.2019, 07:29
Помогаю со студенческими работами здесь

Не работает защита от межсайтового скриптинга в spring security
Здравствуйте. Помогите, пожалуйста, решить проблему. Настроил спринг секьюрити. Все работает. Авторизация проходит хорошо. Но вот когда я...

Авторизация не работает при включенной CSRF защите Spring Security
Здравствуйте вот столкнулся с такой проблемой при попытке авторизации получал ответ 403 forbidden и никаких логов хотя, интрецептор...

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

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

Не работает gem 'bcrypt-ruby' в Rails 4.0.0
У меня стоит Ruby 2 и Rails 4. Проблемы возникли с gem 'bcrypt-ruby'. При установке gem 'bcrypt-ruby', '~&gt; 3.0.0' устанавливается версия...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru