Форум программистов, компьютерный форум, киберфорум
Java: Spring, Spring Boot
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.79/29: Рейтинг темы: голосов - 29, средняя оценка - 4.79
4 / 4 / 4
Регистрация: 07.02.2008
Сообщений: 361

Spring Security жизнь после авторизации

07.10.2016, 16:25. Показов 6317. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день.
Использую Spring Security. Авторизация проходит успешно. Использую БД. ЕСть таблица юзеров. Каждому юзеру принадлежат какие либо данные в разных таблица, т.е. у каждой строки в других таблицах есть поле с id юзера. А как после авторизацию получать данные в соответствии с юзером. Я раньше при авторизации записывал Id авторизованого юзера и отправлял на страницу, и при какждом запросе возвращал этот id обратно на сервер для запросов в базу и с ответом обратно на страницу. Т.е. как бы клал в сессию. Правильно ли так делать и как можно еще?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
07.10.2016, 16:25
Ответы с готовыми решениями:

Spring Security. После авторизации некоректно отображает страницу
Почему то после авторизации не отобрадает страницу. Читал что в этом методе проблема но уже перепробывал десятки комбинаций и нечего. ...

Spring security, кастомная страница авторизации
Всем привет. Как можно сделать свою страницу авторизации, а то стандартная уж очень убогая.

Существует ли security struct или wicket для регистрации и авторизации пользователей, как в spring?
существует security struct или wicket для регистрации и авторизации пользователей как в spring?

22
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
07.10.2016, 17:35
werrt, данные об авторизованном юзере храняться в SpringSecurityContext и его можно получить примерно так

Authentication auth = SecurityContextHolder.getContext().getAu thentication();

затем вы можете из БД вытащить всю нужную вам информацию.
1
4 / 4 / 4
Регистрация: 07.02.2008
Сообщений: 361
07.10.2016, 18:03  [ТС]
Т.е. потом aut.getPrincipal() откуда вытащить Login. И дальше из базы по логину получаем ID юзера, и данные по ID?
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
07.10.2016, 18:07
werrt, это уже от архитектуры вашего приложения зависит. Обычно Principal это объект User.
1
4 / 4 / 4
Регистрация: 07.02.2008
Сообщений: 361
07.10.2016, 18:23  [ТС]
у меня эта строка в консоль выводит
org.springframework.security.core.userde tails.User@364492: Username: test; Password: [PROTECTED]; Enabled: true; AccountNonExpired: true; credentialsNonExpired: true; AccountNonLocked: true; Granted Authorities: ROLE_USER
Но этот обьект к моей энтити юзер не привести. Так как же получить внутренности этого обьекта?

Добавлено через 7 минут
если только так
org.springframework.security.core.userde tails.User user = (User) authentication.getPrincipal();
user.getUsername();
правильно?
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
07.10.2016, 19:07
Цитата Сообщение от werrt Посмотреть сообщение
org.springframework.security.core.userde tails.User user = (User) authentication.getPrincipal();
именно так, только неясно зачем вам юзернейм. Берите сразу ID если вам по нему потом нужно запросы в БД делать
0
4 / 4 / 4
Регистрация: 07.02.2008
Сообщений: 361
07.10.2016, 19:14  [ТС]
но этоже не мой USER (в котором есть ID ), а какой то спринговский User(org.springframework.security.core.u serdetails.User)
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
07.10.2016, 19:24
werrt, это потому что вы так архитектуру построили. Обычно берут своего юзера и дают ему интерфейс UserDetails спринговский.
0
4 / 4 / 4
Регистрация: 07.02.2008
Сообщений: 361
07.10.2016, 22:48  [ТС]
Добавлено через 35 минут
т.е. своим юзером имплеменчю UserDetails. В одном из имплеменченых методов UserDetails пишу код получения ID из базы по логину например. Потом где нужно привожу к своему юзеру (User) authentication.getPrincipal(). Так ?

Добавлено через 3 минуты
не, судя по всему не так

Добавлено через 2 часа 23 минуты
KEKCoGEN, плиз подскажи по поводу "дают ему интерфейс UserDetails спринговский"
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
07.10.2016, 23:40
werrt, ваш класс User должен имплементировать спринговский интерфейс UserDetails
1
4 / 4 / 4
Регистрация: 07.02.2008
Сообщений: 361
07.10.2016, 23:49  [ТС]
ок. а что мне это дает, и что делать дальше ?
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
08.10.2016, 09:09
werrt, в вашем случае это дает вам ID юзера чтобы не ходить лишний раз в БД. В общем случае это дает использовать ваш объект юзера по всей системе. Это удобнее чем использовать юзера спринга. Что делать дальше странный вопрос. Что хотите, то и делайте)
0
4 / 4 / 4
Регистрация: 07.02.2008
Сообщений: 361
08.10.2016, 10:51  [ТС]
Дальше в смысле, то после имплементации он же не будет в SecurityContextHolder. Т.е. нужно еще что то сделать
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
@Entity
@Table(name = "users")
public class User implements UserDetails{
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int id;
 
    @Column(name = "name")
    private String name;
 
    @Column(name = "login")
    private String login;
 
    @Column(name = "password")
    private String password;
 
    @Override
    public Collection<? extends GrantedAuthority> getAuthorities() {
        return null;
    }
 
    public String getPassword() {
        return password;
    }
 
    @Override
    public String getUsername() {
        return null;
    }
 
    @Override
    public boolean isAccountNonExpired() {
        return false;
    }
 
    @Override
    public boolean isAccountNonLocked() {
        return false;
    }
 
    @Override
    public boolean isCredentialsNonExpired() {
        return false;
    }
 
    @Override
    public boolean isEnabled() {
        return false;
 
+ все гетеры и сетеры
    }
Добавлено через 50 минут
и есть также DAO который ходит в базу:

Java
1
2
3
4
5
6
7
8
9
10
@Component
public class UserDAOImpl extends BasicDAOImpl<User> implements UserDAO  {
 
 
    public UserDAOImpl() {
        super(User.class);
    }
 
   
}
Может нужно чтобы он имплементил UserDetailsService?
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
08.10.2016, 13:34
Цитата Сообщение от werrt Посмотреть сообщение
Может нужно чтобы он имплементил UserDetailsService?
нет. У вас должен быть сервис который работает с вашим юзером, вот он и должен имплементировать UserDetailsService и возвращать там вашего юзера.
Конечно если у вас нет сервис слоя и ваши ДАО объекты содержат логику, придется имплементировать там, но это не совсем верно.
0
4 / 4 / 4
Регистрация: 07.02.2008
Сообщений: 361
08.10.2016, 16:00  [ТС]
мои нстройки Security и сам бин UserDetailsService
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
@Configuration
@EnableWebSecurity
@ComponentScan({"ap"})
@PropertySource(value = {"classpath:auth.properties"})
public class AppSecurityConfig extends WebSecurityConfigurerAdapter {
 
    @Autowired
    UserDetailsService userDetailsService;
 
    @Autowired
    public void configAuthentication(AuthenticationManagerBuilder auth) throws Exception {
        auth.userDetailsService(userDetailsService).passwordEncoder(passwordEncoder());
    }
 
    @Bean(name = "passwordEncoder")
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }
 
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
                .antMatchers("/map/rest/hello/**").access("hasRole('ADMIN')")
                .antMatchers("/confidential/**").access("hasRole('USER')")
                .antMatchers("/superconfidential/**").access("hasRole('SUPERADMIN')")
                .and().formLogin().loginPage("/login").permitAll().
                defaultSuccessUrl("/", false)
                .and().csrf().disable().
                sessionManagement().maximumSessions(100).sessionRegistry(sessionRegistry()).and()
                .and().logout().
                logoutUrl("/logout").logoutSuccessUrl("/").
                invalidateHttpSession(true).deleteCookies();
    }
 
    @Bean
    public SessionRegistry sessionRegistry() {
        return new SessionRegistryImpl();
    }
}
бин:
Java
1
2
3
4
5
6
7
8
@Bean
    public UserDetailsService userDetailsService() {
        JdbcDaoImpl jdbcImpl = new JdbcDaoImpl();
        jdbcImpl.setDataSource(hibernateConfig.dataSource());
        jdbcImpl.setUsersByUsernameQuery(environment.getRequiredProperty("usersByQuery"));
        jdbcImpl.setAuthoritiesByUsernameQuery(environment.getRequiredProperty("rolesByQuery"));
        return jdbcImpl;
    }
мой User:

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
@Entity
@Table(name = "users")
public class User implements UserDetails{
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int id;
 
    @Column(name = "name")
    private String name;
 
    @Column(name = "login")
    private String login;
 
    @Column(name = "password")
    private String password;
 
    @Override
    public Collection<? extends GrantedAuthority> getAuthorities() {
        return null;
    }
 
    public String getPassword() {
        return password;
    }
 
    @Override
    public String getUsername() {
        return null;
    }
 
    @Override
    public boolean isAccountNonExpired() {
        return false;
    }
 
    @Override
    public boolean isAccountNonLocked() {
        return false;
    }
 
    @Override
    public boolean isCredentialsNonExpired() {
        return false;
    }
 
    @Override
    public boolean isEnabled() {
        return false;
    }
 
    public User() {
    }
 
    @Column(name = "email")
 
    private String email;
 
    @Column(name="date_registration")
    private Date dateRegistration;
 
    public User(User user) {
        this.id= user.getId();
        this.login= user.getLogin();
        this.name= user.getName();
        this.password= user.getPassword();
 
    }
 
 
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    public int getId() {
        return id;
    }
 
    public void setId(int id) {
        this.id = id;
    }
 
    public String getEmail() {
        return email;
    }
 
    public void setEmail(String email) {
        this.email = email;
    }
 
    public void setPassword(String password) {
        this.password = password;
    }
 
    public String getLogin() {
        return login;
    }
 
    public void setLogin(String login) {
        this.login = login;
    }
 
    public Date getDateRegistration() {
        return dateRegistration;
    }
 
    public void setDateRegistration(Date dateRegistration) {
        this.dateRegistration = dateRegistration;
    }
}

мой CustomUserDetails:

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
public class CustomUserDetails extends User implements UserDetails {
    @Override
    public Collection<? extends GrantedAuthority> getAuthorities() {
        return super.getAuthorities();
    }
 
    @Override
    public boolean isAccountNonExpired() {
        return super.isAccountNonExpired();
    }
 
    @Override
    public boolean isAccountNonLocked() {
        return super.isAccountNonLocked();
    }
 
    @Override
    public boolean isCredentialsNonExpired() {
        return super.isCredentialsNonExpired();
    }
 
    @Override
    public String getPassword() {
        return super.getPassword();
    }
 
    @Override
    public String getUsername() {
        return super.getUsername();
    }
 
    private User user;
 
    public CustomUserDetails(User user) {
        super(user);
        this.user = user;
    }
}
 
 
мой UserDAO который ходит в  BD:
 
@Component
public class UserDAOImpl extends BasicDAOImpl<User> implements UserDAO  {
    @Autowired
    SessionFactory sessionfactory;
 
    public UserDAOImpl() {
        super(User.class);
    }
 
 
    @Override
    public User getByName(String name) {
        User user=null;
        try {
            Session session = sessionfactory.getCurrentSession();
            Criteria criteria = session.createCriteria(User.class);
            criteria.add(Restrictions.eq("name", name));
            user = (User) criteria.uniqueResult();
            System.out.println(user.getId());
        } catch (HibernateException e){}
        return user;
    }
}
мой service:

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
@Component
@Import(HibernateConfig.class)
public class UserServicesImpl implements UserServices, UserDetailsService{
    @Autowired
    SessionFactory sessionFactory;
 
    @Autowired
    UserDAO userDAO;
 
    @Autowired
    UserRoleDAO userRoleDAO;
 
    @Override
    @Transactional
    public void registrationUser(User user) {
        Date date = new Date();
        user.setDateRegistration(date);
        String password = new BCryptPasswordEncoder().encode(user.getPassword());
        user.setPassword(password);
        UserRole userRole = new UserRole(user.getLogin(),Role.ROLE_USER);
        System.out.println(user.toString());
        userRoleDAO.add(userRole);
        userDAO.add(user);
 
    }
 
 
    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
        UserDetails userDetails = userDAO.getByName(username);
        return userDetails;
    }
}

мой controller:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@Controller
public class TestController {
 
    @Autowired
    UserDetailsService userDetailsService;
 
    @RequestMapping("/test")
    public ModelAndView getTestPage(){
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.setViewName("test");
        System.err.println("вызов тест контроллер");
        creatTestXml();
        return modelAndView;
    }
 
    @RequestMapping(value = "/aut")
    public  void aut(){
        CustomUserDetails userDetails = (CustomUserDetails) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
В итоге ошибка is java.lang.ClassCastException: org.springframework.security.core.userde tails.User cannot be cast to ap.entity.CustomUserDetails
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
08.10.2016, 16:37
Лучший ответ Сообщение было отмечено werrt как решение

Решение

werrt,
Java
1
2
3
4
5
6
7
8
@Bean
    public UserDetailsService userDetailsService() {
        JdbcDaoImpl jdbcImpl = new JdbcDaoImpl();
        jdbcImpl.setDataSource(hibernateConfig.dataSource());
        jdbcImpl.setUsersByUsernameQuery(environment.getRequiredProperty("usersByQuery"));
        jdbcImpl.setAuthoritiesByUsernameQuery(environment.getRequiredProperty("rolesByQuery"));
        return jdbcImpl;
    }
Тут должен быть ваш UserServicesImpl

Цитата Сообщение от werrt Посмотреть сообщение
@Autowired
* * UserDetailsService userDetailsService;
тут нужно инжектить ваш UserServicesImpl

Цитата Сообщение от werrt Посмотреть сообщение
public class CustomUserDetails extends User implements UserDetails {
этого класса вообще не должно быть
2
4 / 4 / 4
Регистрация: 07.02.2008
Сообщений: 361
08.10.2016, 20:59  [ТС]
так, немного осознал и переписал:

мой user
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
@Entity
@Table(name = "users")
public class User implements UserDetails{
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int id;
 
    @Column(name = "name")
    private String name;
 
    @Column(name = "login")
    private String login;
 
    @Column(name = "password")
    private String password;
 
    @Override
    public Collection<? extends GrantedAuthority> getAuthorities() {
        return null;
    }
 
    public String getPassword() {
        return password;
    }
 
    @Override
    public String getUsername() {
        return null;
    }
 
    @Override
    public boolean isAccountNonExpired() {
        return false;
    }
 
    @Override
    public boolean isAccountNonLocked() {
        return false;
    }
 
    @Override
    public boolean isCredentialsNonExpired() {
        return false;
    }
 
    @Override
    public boolean isEnabled() {
        return false;
    }
 
    public User() {
    }
 
    @Column(name = "email")
 
    private String email;
 
    @Column(name="date_registration")
    private Date dateRegistration;
 
    public User(User user) {
        this.id= user.getId();
        this.login= user.getLogin();
        this.name= user.getName();
        this.password= user.getPassword();
 
    }
 
 
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    public int getId() {
        return id;
    }
 
    public void setId(int id) {
        this.id = id;
    }
 
    public String getEmail() {
        return email;
    }
 
    public void setEmail(String email) {
        this.email = email;
    }
 
    public void setPassword(String password) {
        this.password = password;
    }
 
    public String getLogin() {
        return login;
    }
 
    public void setLogin(String login) {
        this.login = login;
    }
 
    public Date getDateRegistration() {
        return dateRegistration;
    }
 
    public void setDateRegistration(Date dateRegistration) {
        this.dateRegistration = dateRegistration;
    }
}

сервис где я получаю User по логину

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
@Component
@Import(HibernateConfig.class)
public class UserServicesImpl implements UserServices {
    @Autowired
    SessionFactory sessionFactory;
 
    @Autowired
    UserDAO userDAO;
 
    @Autowired
    UserRoleDAO userRoleDAO;
 
    @Override
    @Transactional
    public void registrationUser(User user) {
        Date date = new Date();
        user.setDateRegistration(date);
        String password = new BCryptPasswordEncoder().encode(user.getPassword());
        user.setPassword(password);
        UserRole userRole = new UserRole(user.getLogin(), Role.ROLE_USER);
        System.out.println(user.toString());
        userRoleDAO.add(userRole);
        userDAO.add(user);
 
    }
 
    @Override
    @Transactional
    public User getUser(String login) {
        User user = new User();
 
        try {
            Session session = this.sessionFactory.getCurrentSession();
            Criteria criteria = session.createCriteria(User.class);
            criteria.add(Restrictions.eq("login", login));
            user = (User) criteria.uniqueResult();
 
        } catch (HibernateException e) {
            e.printStackTrace();
        }
        return user;
    }
мой UserServiceDetailIml куда как я понимаю приходят данные со страницы с формой для залогинивания

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class UserServiceDetailIml implements UserDetailsService {
    @Autowired
    UserServices userServices;
 
    @Autowired
    UserRoleDAO userRoleDAO;
 
    @Override
    public UserDetails loadUserByUsername(String login) throws UsernameNotFoundException {
        System.out.println(login);
      User user = userServices.getUser(login);
        Set<GrantedAuthority> roles= new HashSet<>();
        roles.add(new SimpleGrantedAuthority("ROLE_USER"));
        UserDetails userDetails =  new org.springframework.security.core.userdetails.User(user.getLogin(),
                user.getPassword(),
                roles);
 
 
        return userDetails;
    }
}

бин для конфига Секюрити

Java
1
2
3
4
5
 @Bean
    public UserDetailsService userDetailsService() {
     
        return new UserServiceDetailIml();
    }

и контролер в котором мне нужно получить ID Usera

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
@Controller
public class TestController {
 
    @Autowired
    UserDetailsService userDetailsService;
 
    @RequestMapping("/test")
    public ModelAndView getTestPage(){
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.setViewName("test");
        System.err.println("вызов тест контроллер");
        creatTestXml();
        return modelAndView;
    }
 
    public void creatTestXml()  {
        DocumentBuilder documentBuilder = null;
 
    }
    @RequestMapping(value = "/aut")
    public  void aut(){
   
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  ap.entity.User user = (ap.entity.User) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
    }
 
}



Но получить id так и не смог, при приведение к user в контролере ошибка cast exeption.


//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Добавлено через 1 час 22 минуты
Наконец сделал, вдруг кому пригодится
нужно всетаки добавить еще класс, не знаю может и без него можно как то, пока не придумал

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
public class CustomUserDetails extends User implements UserDetails {
    private static final long serialVersionUID = 1L;
    private ap.entity.User user; //внимание это не org.springframework.security.core.userdetails.User;
 
    public CustomUserDetails(ap.entity.User user) {
        super(user);
        this.user = user;
    }
 
    @Override
    public Collection<? extends GrantedAuthority> getAuthorities() {
        // You don't talk about UserRoles, so return ADMIN for everybody or implement roles.
        return AuthorityUtils.commaSeparatedStringToAuthorityList("ROLE_ADMIN");
    }
 
    @Override
    public boolean isAccountNonExpired() {
        return true;
    }
 
    @Override
    public boolean isAccountNonLocked() {
        return true;
    }
 
    @Override
    public boolean isCredentialsNonExpired() {
        return true;
    }
 
    @Override
    public boolean isEnabled() {
        // just for example
        return  true;
    }
 
    @Override
    public String getUsername() {
        return this.user.getUsername();
    }
 
    @Override
    public String getPassword() {
        return this.user.getPassword();
    }
 
}
и немного изменить приведение в контролере :
CustomUserDetails user = (CustomUserDetails) SecurityContextHolder.getContext().getAu thentication().getPrincipal();

и немного переписать UserServiceDetailIml:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class UserServiceDetailIml implements UserDetailsService {
    @Autowired
    UserServices userServices;
 
    @Autowired
    UserRoleDAO userRoleDAO;
 
    @Override
    public UserDetails loadUserByUsername(String login) throws UsernameNotFoundException {
 
      User user = userServices.getUser(login);
        if(user != null){
     // здесь не забыть реализовать получение роли юзера или перенести получение в  CustomUserDetails
       // UserRole userRole =   userRoleDAO.getRoleByUserLogin(login);
       // System.out.println(userRole.toString());
        return new CustomUserDetails(user);}
        else {  throw new UsernameNotFoundException("No user present with login: " + login);}
 
    }
}
Не знаю правильно ли, но вроде работает и можно получать все данные обьекта юзер через контекст ))
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
08.10.2016, 21:16
werrt, почему бы просто не написать как я выше посоветовал? У вас тут лишние классы и сервисы.
0
4 / 4 / 4
Регистрация: 07.02.2008
Сообщений: 361
09.10.2016, 00:38  [ТС]
KEKCoGEN, да уверен вы правы, просто пока пытался понять как и что работает размазал по доп классам , чтобы самому было понятнее. Потом конечно отрефакторю все лишнее. Спасибо

Добавлено через 2 часа 57 минут
KEKCoGEN,
а если я все таки буду использовать конфиг через JdbcDaoImpl
Java
1
2
3
4
5
6
7
@Bean
    public UserDetailsService userDetailsService() {
      JdbcDaoImpl jdbcImpl = new JdbcDaoImpl();
        jdbcImpl.setDataSource(hibernateConfig.dataSource());
        jdbcImpl.setUsersByUsernameQuery(environment.getRequiredProperty("usersByQuery"));
        jdbcImpl.setAuthoritiesByUsernameQuery(environment.getRequiredProperty("rolesByQuery"));
        return jdbcImpl;
могу я как-то получить в контексте id?

Была идея просто создать класс наследник JdbcDaoImpl, где вытащить Userа, но что то не получается.
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
09.10.2016, 08:52
werrt, я с JdbcDaoImpl не работал. хз что это за класс
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
09.10.2016, 08:52
Помогаю со студенческими работами здесь

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

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

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

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

Spring security c 3 на 4
Не знаю почему, но после того, как перешел на spring security 4 возникает проблема. Захожу на страницу логина, ввожу имя и пароль....


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru