powered by simpleCommunicator - 2.0.30     © 2024 Programmizd 02
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / Начал знакомство со spring. Поругайте код
25 сообщений из 75, страница 2 из 3
Начал знакомство со spring. Поругайте код
    #39962886
dakeiras
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mad_nazgul
mayton
Это ... прекрасно.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
@AllArgsConstructor
@NoArgsConstructor
@Accessors(chain = true)
@Getter
@Setter
@Entity
@Table (name = "goal_parameter", schema = "ptcore")
@DynamicInsert
public class GoalParameter {



Больше половины аннотаций это lombok.
Который можно заменить на Kotlin :-)
Ну или Java 14.


А лучшу на Груви.

И добавить @ToString, @Slf4j и @BlackBox.
...
Рейтинг: 0 / 0
Начал знакомство со spring. Поругайте код
    #39962916
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В неком гипотетическом будущем.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
@If("Java")
 @AllArgsConstructor
 @NoArgsConstructor
 @Accessors(chain = true)
 @Getter
 @Setter
@Else // Kotlin
 @Nothing
@EndIf
...
Рейтинг: 0 / 0
Начал знакомство со spring. Поругайте код
    #39962963
bobo96
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mad_nazgul

Для вас уже специально все сделали.

Видел :) Многое оттуда узнал :) Но вопросы там задать некому :(
...
Рейтинг: 0 / 0
Начал знакомство со spring. Поругайте код
    #39963147
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
В неком гипотетическом будущем.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
@If("Java")
 @AllArgsConstructor
 @NoArgsConstructor
 @Accessors(chain = true)
 @Getter
 @Setter
@Else // Kotlin
 @Nothing
@EndIf



Э-э-э зачем?!

Когда есть "Ctrl+Alt+Shift+K" ! ;-)
...
Рейтинг: 0 / 0
Начал знакомство со spring. Поругайте код
    #39963150
Фотография Valentin Kolesnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
В неком гипотетическом будущем.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
@If("Java")
 @AllArgsConstructor
 @NoArgsConstructor
 @Accessors(chain = true)
 @Getter
 @Setter
@Else // Kotlin
 @Nothing
@EndIf



@Accessors(chain = true) вроде бы нет в котлине.

Хорошего вам дня.
...
Рейтинг: 0 / 0
Начал знакомство со spring. Поругайте код
    #39963180
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mad_nazgul,
С геттерами тоже были горячие клавиши. Однако все хотят вообще не писать
...
Рейтинг: 0 / 0
Начал знакомство со spring. Поругайте код
    #39963185
bobo96
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Появились вопросы, надеюсь сообщество поможет..
Не понимаю тему про роли. В БД прописал для каждого пользователя типа уровень доступа, сейчас 2: Admin и 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.
@Entity
@Table(name="users")
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;

    @NotBlank
    @Email
    private String login;

    @NotBlank
    private String password;

    @NotBlank
    @Column(name = "name")
    private String username;

    @JsonIgnore
    @OneToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "id_role", referencedColumnName = "id")
    private Role roles;

    public User() {
    }
    
    public User(int id, String name, String login, String password, Role role) {
        this.id = id;
        this.username = name;
        this.login = login;
        this.password = password;
        this.roles = role;
    }


    public int getId() {
        return id;
    }

    public String getUsername() {
        return username;
    }

    public String getLogin() {
        return login;
    }

    public String getPassword() {
        return password;
    }

    public Role getRoles() {
        return roles;
    }

}



Код: 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.
@Entity
@Table(name="roles")
public class Role
        implements GrantedAuthority {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;

    @NotBlank
    private String role;

    @OneToMany(mappedBy = "roles")
    private Collection<User> users;

    public int getId() {
        return id;
    }

    public Collection<User> getUsers() {
        return users;
    }

    @Override
    public String getAuthority() {
        return role;
    }
}



Код: 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.
public class CustomUserDetails
        implements UserDetails {

    private final int id;

    private final String name;

    private final String username;

    private final String email;

    private final String password;

    private final Collection<? extends GrantedAuthority> authorities;

    private CustomUserDetails(int id, String name, String login, String password,
                              Collection<? extends GrantedAuthority> authorities) {
        this.id = id;
        this.name = name;
        this.username = null;
        this.email = login;
        this.password = password;
        this.authorities = authorities;
    }

    public static CustomUserDetails create(User user) {
        List<GrantedAuthority> authorities = Collections.singletonList(
                new SimpleGrantedAuthority((user.getRoles()).getAuthority()));

        return new CustomUserDetails(
                user.getId(),
                user.getUsername(),
                user.getLogin(),
                user.getPassword(),
                authorities
        );
    }

    public int getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public String getEmail() {
        return email;
    }

    @Override
    public String getUsername() {
        return username;
    }

    @Override
    public String getPassword() {
        return password;
    }

    @Override
    public Collection<? extends GrantedAuthority> getAuthorities() {
        return authorities;
    }

    @Override
    public boolean isAccountNonExpired() {
        return true;
    }

    @Override
    public boolean isAccountNonLocked() {
        return true;
    }

    @Override
    public boolean isCredentialsNonExpired() {
        return true;
    }

    @Override
    public boolean isEnabled() {
        return true;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        CustomUserDetails that = (CustomUserDetails) o;
        return Objects.equals(id, that.id);
    }

    @Override
    public int hashCode() {

        return Objects.hash(id);
    }
}



Код: 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.
@Service
public class CustomUserDetailsService
        implements UserDetailsService {

    final UserRepository userRepository;

    private static final Logger logger = LoggerFactory.getLogger(CustomUserDetailsService.class);

    public CustomUserDetailsService(UserRepository userRepository) {
        this.userRepository = userRepository;
    }

    @Override
    @Transactional
    public UserDetails loadUserByUsername(String login)
            throws UsernameNotFoundException {

        User user = userRepository.findByLogin(login);

        if(user == null) {
            logger.error("User not found with email {}", login);
            throw new UsernameNotFoundException("User not found with login: " + login);
        }

        return CustomUserDetails.create(user);
    }

    @Transactional
    public UserDetails loadUserById(int id) {
        User user = userRepository.findById(id);

        if(user == null) {
            logger.error("User not found with id {}", id);
            throw new UsernameNotFoundException("User not found with id: " + id);
        }

        return CustomUserDetails.create(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.
@RestController
@RequestMapping("/api")
public class UserController {

    final UserRepository mUserRepository;

    final CustomUserDetailsService mCustomUserDetailsService;

    public UserController(UserRepository mUserRepository, CustomUserDetailsService customUserDetailsService) {
        this.mUserRepository = mUserRepository;
        this.mCustomUserDetailsService = customUserDetailsService;
    }

    @GetMapping("/user/{id}")
    public BaseResponse<?> getUserName(@PathVariable int id) {
        User user = mUserRepository.findById(id);

        if(user != null) {

            Authentication auth = SecurityContextHolder.getContext().getAuthentication();

            for(GrantedAuthority role : auth.getAuthorities()) {
                System.out.println(role.getAuthority()); // ЗДЕСЬ ВСЕ ОК, ВЫЛАЗИТ ТА РОЛЬ, ЧТО В БД
            }

            return new BaseResponse<>(HttpStatus.OK, null, user);
        }

        return new BaseResponse<>(HttpStatus.NOT_FOUND, null, "User not found");
    }

}




В классе UserController специально тащу роль, вроде все ок, пишет Admin. При этом, если в конфиге безопасности написать
Код: java
1.
.authorizeRequests().antMatchers("/api/**").hasRole("Admin")


то вылазит 403я ошибка.
Что я делаю не так ?
Конфиг:


Код: 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.
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(
        securedEnabled = true,
        jsr250Enabled = true,
        prePostEnabled = true
)
public class SecurityConfig
        extends WebSecurityConfigurerAdapter {

    private final JwtAuthenticationEntryPoint authenticationEntryPoint;
    final CustomUserDetailsService customUserDetailsService;

    @Bean
    public JwtAuthenticationFilter jwtAuthenticationFilter() {
        return new JwtAuthenticationFilter();
    }

    @Bean(BeanIds.AUTHENTICATION_MANAGER)
    @Override
    public AuthenticationManager authenticationManagerBean() throws Exception {
        return super.authenticationManagerBean();
    }

    public SecurityConfig(JwtAuthenticationEntryPoint authenticationEntryPoint,
                          CustomUserDetailsService customUserDetailsService) {
        this.authenticationEntryPoint = authenticationEntryPoint;
        this.customUserDetailsService = customUserDetailsService;
    }

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

    @Override
    public void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth
                .userDetailsService(customUserDetailsService)
                .passwordEncoder(passwordEncoder());
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                .cors()
                .and()
                .csrf().disable()
                .exceptionHandling()
                .authenticationEntryPoint(authenticationEntryPoint)
                .and()
                .sessionManagement()
                .sessionCreationPolicy(SessionCreationPolicy.STATELESS)
                .and()
                .authorizeRequests().antMatchers("/auth/**").permitAll()
                .and()
                .authorizeRequests().antMatchers("/api/**").hasRole("Admin")
                .anyRequest().authenticated()
                .and()
                .addFilterBefore(jwtAuthenticationFilter(), UsernamePasswordAuthenticationFilter.class);

    }
}




На гитхабе код обновил. Заранее благодарю!
...
Рейтинг: 0 / 0
Начал знакомство со spring. Поругайте код
    #39963198
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valentin Kolesnikov
mayton
В неком гипотетическом будущем.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
@If("Java")
 @AllArgsConstructor
 @NoArgsConstructor
 @Accessors(chain = true)
 @Getter
 @Setter
@Else // Kotlin
 @Nothing
@EndIf



@Accessors(chain = true) вроде бы нет в котлине.

Хорошего вам дня.

Это шутка была. Я просто жду когда кто-то сделает аннотации императивным над-языком.
...
Рейтинг: 0 / 0
Начал знакомство со spring. Поругайте код
    #39963210
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
Вангую 4-5 лет
...
Рейтинг: 0 / 0
Начал знакомство со spring. Поругайте код
    #39963230
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может кто-то в гитхабе уже начал такой безумный проект.

P.S. Видя такое мета-программирование Джон-Маккарти умер-бы второй раз если-бы был жив.
...
Рейтинг: 0 / 0
Начал знакомство со spring. Поругайте код
    #39963269
dakeiras
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Может кто-то в гитхабе уже начал такой безумный проект.

P.S. Видя такое мета-программирование Джон-Маккарти умер-бы второй раз если-бы был жив.

Это не мета-программирование. Это обычное декларативное программирование.
...
Рейтинг: 0 / 0
Начал знакомство со spring. Поругайте код
    #39963282
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я-же к этому и подвожу. К тому что мы не можем говорить просто о декларативности когда у нас несколько
независимых процессоров аннотаций. У нас появляется ПОРЯДОК их процессинга.

И да. Вы правы. Это уже не декларативность. И здесь углубление этой идеи - это могила. Мы - копаем себе могилу.
...
Рейтинг: 0 / 0
Начал знакомство со spring. Поругайте код
    #39963292
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Я-же к этому и подвожу. К тому что мы не можем говорить просто о декларативности когда у нас несколько
независимых процессоров аннотаций. У нас появляется ПОРЯДОК их процессинга.

И да. Вы правы. Это уже не декларативность. И здесь углубление этой идеи - это могила. Мы - копаем себе могилу.

Порядок процессинга не самая большая проблема тут. Со всеми этими аннотациями Java из строго-типизированного языка превращается по факту в хер пойми кем исполняемый хер знает какой код. Ну и все прелести дебага
...
Рейтинг: 0 / 0
Начал знакомство со spring. Поругайте код
    #39963295
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл ник
Порядок процессинга не самая большая проблема тут. Со всеми этими аннотациями Java из строго-типизированного языка превращается по факту в хер пойми кем исполняемый хер знает какой код. Ну и все прелести дебага


Вот да. Я тоже про это подумал, прикинул, что терять всё равно нечего и перелез кодить на ноду.
...
Рейтинг: 0 / 0
Начал знакомство со spring. Поругайте код
    #39963362
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
mad_nazgul,
С геттерами тоже были горячие клавиши. Однако все хотят вообще не писать


Почему были? Есть!
Регулярно ими пользуюсь. :-)

Но иногда так хочется нажать "Ctrl+Alt+Shift+K" :-)
...
Рейтинг: 0 / 0
Начал знакомство со spring. Поругайте код
    #39963369
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Я-же к этому и подвожу. К тому что мы не можем говорить просто о декларативности когда у нас несколько
независимых процессоров аннотаций. У нас появляется ПОРЯДОК их процессинга.

И да. Вы правы. Это уже не декларативность. И здесь углубление этой идеи - это могила. Мы - копаем себе могилу.


Поэтому я сейчас лично топлю в проектах в которых я работаю, чтобы все аннотации Spring'а не вылезали дальше конфигурационных файлов, ну может быть контроллерах.
...
Рейтинг: 0 / 0
Начал знакомство со spring. Поругайте код
    #39963429
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да. А тот % вреда который превносит Lombok превышает полезный эффект. Зло в моем понимании
это сужение скоупа применения. Если раньше вы писали Java-код то теперь вы пишете Spring/Lombok
код. И этот код уже не может быть повторно переиспользован в других проектах. Он - прибит гвоздями
к этой технологии и к этому фреймворку и к этому сету процессорова аннтоаций.

А в вопросах DTO/Pojo это важно. Они должны быть кандидатами на повторное использование. И без
всякой ненужной шелухи.
...
Рейтинг: 0 / 0
Начал знакомство со spring. Поругайте код
    #39963449
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Да. А тот % вреда который превносит Lombok превышает полезный эффект. Зло в моем понимании
это сужение скоупа применения. Если раньше вы писали Java-код то теперь вы пишете Spring/Lombok
код. И этот код уже не может быть повторно переиспользован в других проектах. Он - прибит гвоздями
к этой технологии и к этому фреймворку и к этому сету процессорова аннтоаций.

А в вопросах DTO/Pojo это важно. Они должны быть кандидатами на повторное использование. И без
всякой ненужной шелухи.

Тут абсолютно не согласен. Все аннотации ломбока - compile-time. И если что не так - получи ошибку компиляции. В отличие от всяких спринговых аннотаций - которые рантайм. Ничего плохого в ломбоке не вижу
...
Рейтинг: 0 / 0
Начал знакомство со spring. Поругайте код
    #39963466
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dakeiras
mayton
Может кто-то в гитхабе уже начал такой безумный проект.

P.S. Видя такое мета-программирование Джон-Маккарти умер-бы второй раз если-бы был жив.

Это не мета-программирование. Это обычное декларативное программирование.
имхо
Декларативное и есть мета.
Так как вы пишите декларативные значки-код над другим кодом.
А код над кодом это мета...
...
Рейтинг: 0 / 0
Начал знакомство со spring. Поругайте код
    #39963472
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мы где-то обсуждали maven pom.xml.

И вроде как решили что декларативное - но фиксирующее порядок следования утверждений.
...
Рейтинг: 0 / 0
Начал знакомство со spring. Поругайте код
    #39963504
bobo96
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пацаны, я вам тут не мешаю ?)
...
Рейтинг: 0 / 0
Начал знакомство со spring. Поругайте код
    #39963543
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zzz79
mayton
Мы где-то обсуждали maven pom.xml.

И вроде как решили что декларативное - но фиксирующее порядок следования утверждений.

мавен - для каких то инди проектов)

что то более менее серьезное требует самописных тасок - тобишь gradle

Я бы рассуждал иначе. Когда тебе надо быстро понять как происходит билд проекта - то здесь
мавен - строг и очевиден. Gradle нежуя не очевиден. Потому что он - не конфиг а микро-код
для сборки. Который писал какой-то программист. И поэтому когда ты трабл-шутишь сломанную
сборку на gradle (а такое часто бывает) - то ты должен делать РЕВЕРС инжинеринг программы
билда. И понять что имел в виду тот китаец или индус когда втащил в проект микро-программу
сборки.

Тоесть градл - это не вершина эволюции сборщиков. Это скорее просто некий форк. Или спин-офф.
...
Рейтинг: 0 / 0
Начал знакомство со spring. Поругайте код
    #39963555
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
по этой же причине мне не зашел sbt
...
Рейтинг: 0 / 0
Начал знакомство со spring. Поругайте код
    #39963856
Фотография Valentin Kolesnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Spring-boot приложение от немецких чиновников.

Удивил checkstyle, code civerage и sonar cloud.

https://github.com/corona-warn-app/cwa-server

Хорошего вам дня!
...
Рейтинг: 0 / 0
Начал знакомство со spring. Поругайте код
    #39963998
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zzz79
mayton
Мы где-то обсуждали maven pom.xml.

И вроде как решили что декларативное - но фиксирующее порядок следования утверждений.

мавен - для каких то инди проектов)

что то более менее серьезное требует самописных тасок - тобишь gradle


Maven это как строгая типизация.
Кому то мешает, кому то помогает.
В т.ч. и в серьёзных проектах.

Мне например удобнее работать с maven. Т.к. знаешь что где лежит, и как будет собираться.
А с gradle можно навернуть все что угодно.

Но надо будет к gradle присмотреться, т.к. он на kotlin переходит. :-)
...
Рейтинг: 0 / 0
25 сообщений из 75, страница 2 из 3
Форумы / Java [игнор отключен] [закрыт для гостей] / Начал знакомство со spring. Поругайте код
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]