From 2e40d04b2a969308ce083da50fdce780b426aa3a Mon Sep 17 00:00:00 2001 From: "andrea.terzani" Date: Mon, 12 Aug 2024 13:52:22 +0200 Subject: [PATCH] remove security --- pom.xml | 29 ++---- .../hermione/security/config/CorsConfig.java | 16 ---- .../security/config/SecurityConfig.java | 87 ------------------ .../security/controllers/AuthController.java | 88 ------------------- .../security/dto/AuthenticationRequest.java | 18 ---- .../security/dto/AuthenticationResponse.java | 19 ---- .../security/dto/FetchUserResponse.java | 16 ---- .../hermione/security/entity/Role.java | 6 -- .../hermione/security/entity/User.java | 41 --------- .../security/filter/JwtTokenFilter.java | 54 ------------ .../security/repository/UserRepository.java | 15 ---- .../services/CustomUserDetailsService.java | 35 -------- .../utility/JwtAuthenticationEntryPoint.java | 30 ------- .../security/utility/JwtTokenProvider.java | 76 ---------------- 14 files changed, 5 insertions(+), 525 deletions(-) delete mode 100644 src/main/java/com/olympus/hermione/security/config/CorsConfig.java delete mode 100644 src/main/java/com/olympus/hermione/security/config/SecurityConfig.java delete mode 100644 src/main/java/com/olympus/hermione/security/controllers/AuthController.java delete mode 100644 src/main/java/com/olympus/hermione/security/dto/AuthenticationRequest.java delete mode 100644 src/main/java/com/olympus/hermione/security/dto/AuthenticationResponse.java delete mode 100644 src/main/java/com/olympus/hermione/security/dto/FetchUserResponse.java delete mode 100644 src/main/java/com/olympus/hermione/security/entity/Role.java delete mode 100644 src/main/java/com/olympus/hermione/security/entity/User.java delete mode 100644 src/main/java/com/olympus/hermione/security/filter/JwtTokenFilter.java delete mode 100644 src/main/java/com/olympus/hermione/security/repository/UserRepository.java delete mode 100644 src/main/java/com/olympus/hermione/security/services/CustomUserDetailsService.java delete mode 100644 src/main/java/com/olympus/hermione/security/utility/JwtAuthenticationEntryPoint.java delete mode 100644 src/main/java/com/olympus/hermione/security/utility/JwtTokenProvider.java diff --git a/pom.xml b/pom.xml index 94371a8..1de04e3 100644 --- a/pom.xml +++ b/pom.xml @@ -64,26 +64,7 @@ 1.18.34 - - io.jsonwebtoken - jjwt-api - 0.11.5 - - - io.jsonwebtoken - jjwt-impl - 0.11.5 - - - io.jsonwebtoken - jjwt-jackson - 0.11.5 - - - - org.springframework.boot - spring-boot-starter-security - + org.antlr @@ -91,10 +72,10 @@ 4.3.4 - com.google.code.gson - gson - 2.8.8 - + com.google.code.gson + gson + 2.8.8 + diff --git a/src/main/java/com/olympus/hermione/security/config/CorsConfig.java b/src/main/java/com/olympus/hermione/security/config/CorsConfig.java deleted file mode 100644 index 1d704b8..0000000 --- a/src/main/java/com/olympus/hermione/security/config/CorsConfig.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.olympus.hermione.security.config; - -import org.springframework.context.annotation.Configuration; -import org.springframework.web.servlet.config.annotation.CorsRegistry; -import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; - -@Configuration -public class CorsConfig implements WebMvcConfigurer { - @Override - public void addCorsMappings(CorsRegistry registry) { - registry.addMapping("/**") - .allowedOrigins("*") - .allowedHeaders("*") - .allowedMethods("GET", "POST", "PUT", "DELETE"); - } -} diff --git a/src/main/java/com/olympus/hermione/security/config/SecurityConfig.java b/src/main/java/com/olympus/hermione/security/config/SecurityConfig.java deleted file mode 100644 index 85f741f..0000000 --- a/src/main/java/com/olympus/hermione/security/config/SecurityConfig.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.olympus.hermione.security.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.AuthenticationManager; - -import org.springframework.security.authentication.dao.DaoAuthenticationProvider; -import org.springframework.security.config.annotation.authentication.configuration.AuthenticationConfiguration; -import org.springframework.security.config.annotation.web.builders.HttpSecurity; -import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; -import org.springframework.security.config.http.SessionCreationPolicy; -import org.springframework.security.crypto.password.NoOpPasswordEncoder; -import org.springframework.security.crypto.password.PasswordEncoder; -import org.springframework.security.web.SecurityFilterChain; -import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; - -import com.olympus.hermione.security.filter.JwtTokenFilter; -import com.olympus.hermione.security.services.CustomUserDetailsService; - -@EnableWebSecurity -@Configuration -public class SecurityConfig { - - @Autowired - CustomUserDetailsService userDetailsService; - -/* @Autowired - private AuthEntryPointJwt unauthorizedHandler; -*/ - @Bean - public JwtTokenFilter authenticationJwtTokenFilter() { - return new JwtTokenFilter(); - } - -//@Override -//public void configure(AuthenticationManagerBuilder authenticationManagerBuilder) throws Exception { -// authenticationManagerBuilder.userDetailsService(userDetailsService).passwordEncoder(passwordEncoder()); -//} - - @Bean - public DaoAuthenticationProvider authenticationProvider() { - DaoAuthenticationProvider authProvider = new DaoAuthenticationProvider(); - - authProvider.setUserDetailsService(userDetailsService); - authProvider.setPasswordEncoder(passwordEncoder()); - - return authProvider; - } - -//@Bean -//@Override -//public AuthenticationManager authenticationManagerBean() throws Exception { -// return super.authenticationManagerBean(); -//} - - @Bean - public AuthenticationManager authenticationManager(AuthenticationConfiguration authConfig) throws Exception { - return authConfig.getAuthenticationManager(); - } - - - @Bean - PasswordEncoder passwordEncoder() { - return NoOpPasswordEncoder.getInstance(); - } - - - @Bean - public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { - http.csrf(csrf -> csrf.disable()) - .sessionManagement(session -> session.sessionCreationPolicy(SessionCreationPolicy.STATELESS)) - .authorizeHttpRequests(auth -> auth.requestMatchers("/api/auth/**").permitAll() - .requestMatchers("/api/test/**").permitAll() - .requestMatchers("/test/**").permitAll() - .anyRequest().permitAll());//.authenticated()); - - http.authenticationProvider(authenticationProvider()); - - http.addFilterBefore(authenticationJwtTokenFilter(), UsernamePasswordAuthenticationFilter.class); - - return http.build(); - } - -} - diff --git a/src/main/java/com/olympus/hermione/security/controllers/AuthController.java b/src/main/java/com/olympus/hermione/security/controllers/AuthController.java deleted file mode 100644 index c1bd6d3..0000000 --- a/src/main/java/com/olympus/hermione/security/controllers/AuthController.java +++ /dev/null @@ -1,88 +0,0 @@ -package com.olympus.hermione.security.controllers; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.HttpHeaders; -import org.springframework.http.ResponseEntity; -import org.springframework.security.authentication.AuthenticationManager; -import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; -import org.springframework.security.core.Authentication; -import org.springframework.security.core.context.SecurityContextHolder; -import org.springframework.web.bind.annotation.CrossOrigin; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -import com.olympus.hermione.security.dto.AuthenticationRequest; -import com.olympus.hermione.security.dto.AuthenticationResponse; -import com.olympus.hermione.security.dto.FetchUserResponse; -import com.olympus.hermione.security.entity.User; -import com.olympus.hermione.security.utility.JwtTokenProvider; - -@RestController -@CrossOrigin -@RequestMapping("/api/auth") -public class AuthController { - - @Autowired - private AuthenticationManager authenticationManager; - - @Autowired - private JwtTokenProvider jwtTokenProvider; - - @PostMapping("/login") - public ResponseEntity authenticateUser(@RequestBody AuthenticationRequest authenticationRequest) { - - Authentication authentication = authenticationManager.authenticate( - new UsernamePasswordAuthenticationToken( - authenticationRequest.getUsername(), - authenticationRequest.getPassword() - ) - ); - - SecurityContextHolder.getContext().setAuthentication(authentication); - String jwt = jwtTokenProvider.createToken(authentication); - - - HttpHeaders httpHeaders = new HttpHeaders(); - httpHeaders.add("authorization", jwt); - httpHeaders.add("access-control-expose-headers", "authorization"); - AuthenticationResponse authenticationResponse = new AuthenticationResponse(jwt, (User) authentication.getPrincipal()); - - return ResponseEntity.ok().headers(httpHeaders).body(authenticationResponse); - - } - - @GetMapping("/fetch-user") - public FetchUserResponse fetchUser(Authentication authentication) { - User principal = (User) authentication.getPrincipal(); - principal.setPassword(null); - FetchUserResponse fetchUserResponse = new FetchUserResponse(); - fetchUserResponse.setData(principal); - return fetchUserResponse; - - } - - - @GetMapping("/refresh-token") - public ResponseEntity refreshToken(Authentication authentication) { - - - SecurityContextHolder.getContext().setAuthentication(authentication); - String jwt = jwtTokenProvider.createToken(authentication); - - - HttpHeaders httpHeaders = new HttpHeaders(); - httpHeaders.add("authorization", jwt); - httpHeaders.add("access-control-expose-headers", "authorization"); - AuthenticationResponse authenticationResponse = new AuthenticationResponse(jwt, (User) authentication.getPrincipal()); - - return ResponseEntity.ok().headers(httpHeaders).body(authenticationResponse); - } - - @GetMapping("/test") - public ResponseEntity test() { - return ResponseEntity.ok(" you have access now "); - } -} diff --git a/src/main/java/com/olympus/hermione/security/dto/AuthenticationRequest.java b/src/main/java/com/olympus/hermione/security/dto/AuthenticationRequest.java deleted file mode 100644 index 0aa9c3a..0000000 --- a/src/main/java/com/olympus/hermione/security/dto/AuthenticationRequest.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.olympus.hermione.security.dto; - -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; - -@AllArgsConstructor -@NoArgsConstructor -@Getter -@Setter -public class AuthenticationRequest { - - private String username; - private String password; -} - - diff --git a/src/main/java/com/olympus/hermione/security/dto/AuthenticationResponse.java b/src/main/java/com/olympus/hermione/security/dto/AuthenticationResponse.java deleted file mode 100644 index f799068..0000000 --- a/src/main/java/com/olympus/hermione/security/dto/AuthenticationResponse.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.olympus.hermione.security.dto; - -import com.olympus.hermione.security.entity.User; - -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; - -@Getter -@Setter -@AllArgsConstructor -@NoArgsConstructor -public class AuthenticationResponse { - - private String accessToken; - private User data; - -} diff --git a/src/main/java/com/olympus/hermione/security/dto/FetchUserResponse.java b/src/main/java/com/olympus/hermione/security/dto/FetchUserResponse.java deleted file mode 100644 index ec9e324..0000000 --- a/src/main/java/com/olympus/hermione/security/dto/FetchUserResponse.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.olympus.hermione.security.dto; - -import com.olympus.hermione.security.entity.User; - -import lombok.Getter; -import lombok.Setter; - -@Getter -@Setter -public class FetchUserResponse { - private User data; - - - -} - diff --git a/src/main/java/com/olympus/hermione/security/entity/Role.java b/src/main/java/com/olympus/hermione/security/entity/Role.java deleted file mode 100644 index 2216e14..0000000 --- a/src/main/java/com/olympus/hermione/security/entity/Role.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.olympus.hermione.security.entity; - -public enum Role { - ADMIN,USER -} - diff --git a/src/main/java/com/olympus/hermione/security/entity/User.java b/src/main/java/com/olympus/hermione/security/entity/User.java deleted file mode 100644 index 4bbd870..0000000 --- a/src/main/java/com/olympus/hermione/security/entity/User.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.olympus.hermione.security.entity; -import java.util.Collection; - -import org.springframework.data.annotation.Id; -import org.springframework.data.mongodb.core.mapping.Document; -import org.springframework.security.core.GrantedAuthority; -import org.springframework.security.core.authority.SimpleGrantedAuthority; -import org.springframework.security.core.userdetails.UserDetails; - -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; -import java.util.List; - - -@Document(collection = "users") -@Getter @Setter -@Data -@Builder -@NoArgsConstructor -@AllArgsConstructor -public class User implements UserDetails{ - @Id - private String id; - private String username; - private String password; - private String name; - private String surname; - - private Role role; - - @Override - public Collection getAuthorities() { - return List.of(new SimpleGrantedAuthority(role.name())); - } - - -} diff --git a/src/main/java/com/olympus/hermione/security/filter/JwtTokenFilter.java b/src/main/java/com/olympus/hermione/security/filter/JwtTokenFilter.java deleted file mode 100644 index dd6dd26..0000000 --- a/src/main/java/com/olympus/hermione/security/filter/JwtTokenFilter.java +++ /dev/null @@ -1,54 +0,0 @@ -package com.olympus.hermione.security.filter; - -import java.io.IOException; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; -import org.springframework.security.core.context.SecurityContextHolder; -import org.springframework.security.core.userdetails.UserDetails; -import org.springframework.security.core.userdetails.UserDetailsService; -import org.springframework.security.web.authentication.WebAuthenticationDetailsSource; -import org.springframework.stereotype.Component; -import org.springframework.web.filter.OncePerRequestFilter; - -import com.olympus.hermione.security.utility.JwtTokenProvider; - -import jakarta.servlet.FilterChain; -import jakarta.servlet.ServletException; -import jakarta.servlet.http.HttpServletRequest; -import jakarta.servlet.http.HttpServletResponse; -import lombok.AllArgsConstructor; -import lombok.NoArgsConstructor; - -@Component -@AllArgsConstructor -@NoArgsConstructor -public class JwtTokenFilter extends OncePerRequestFilter { - - @Autowired - private JwtTokenProvider jwtTokenProvider; - - @Autowired - private UserDetailsService userDetailsService; - - @Override - protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { - - String token = jwtTokenProvider.resolveToken(request); - - if (token != null && jwtTokenProvider.validateToken(token)) { - - UserDetails userDetails = userDetailsService.loadUserByUsername(jwtTokenProvider.getUsername(token)); - - UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken(userDetails, null, userDetails.getAuthorities()); - - authentication.setDetails(new WebAuthenticationDetailsSource().buildDetails(request)); - SecurityContextHolder.getContext().setAuthentication(authentication); - } - - filterChain.doFilter(request, response); - } - - -} - diff --git a/src/main/java/com/olympus/hermione/security/repository/UserRepository.java b/src/main/java/com/olympus/hermione/security/repository/UserRepository.java deleted file mode 100644 index 1709b4a..0000000 --- a/src/main/java/com/olympus/hermione/security/repository/UserRepository.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.olympus.hermione.security.repository; - -import org.springframework.data.mongodb.repository.MongoRepository; -import org.springframework.data.mongodb.repository.Query; -import org.springframework.stereotype.Repository; - -import com.olympus.hermione.security.entity.User; - -@Repository -public interface UserRepository extends MongoRepository { - - @Query("{username:'?0'}") - User findUserByUsername(String username); -} - diff --git a/src/main/java/com/olympus/hermione/security/services/CustomUserDetailsService.java b/src/main/java/com/olympus/hermione/security/services/CustomUserDetailsService.java deleted file mode 100644 index 977695b..0000000 --- a/src/main/java/com/olympus/hermione/security/services/CustomUserDetailsService.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.olympus.hermione.security.services; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Configuration; -import org.springframework.security.core.userdetails.UserDetails; -import org.springframework.security.core.userdetails.UserDetailsService; -import org.springframework.security.core.userdetails.UsernameNotFoundException; -import org.springframework.stereotype.Service; - -import com.olympus.hermione.security.entity.User; -import com.olympus.hermione.security.repository.UserRepository; - -@Configuration -@Service -public class CustomUserDetailsService implements UserDetailsService { - - @Autowired - private UserRepository userRepository; - - @Override - public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { - try { - User user = userRepository.findUserByUsername(username); - if(user != null){ - return user; - }else{ - throw new Exception("user Not found "); - } - - } catch (Exception e) { - throw new RuntimeException(e); - } - } - -} diff --git a/src/main/java/com/olympus/hermione/security/utility/JwtAuthenticationEntryPoint.java b/src/main/java/com/olympus/hermione/security/utility/JwtAuthenticationEntryPoint.java deleted file mode 100644 index affcdbc..0000000 --- a/src/main/java/com/olympus/hermione/security/utility/JwtAuthenticationEntryPoint.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.olympus.hermione.security.utility; - -import jakarta.servlet.http.HttpServletRequest; -import jakarta.servlet.http.HttpServletResponse; -import org.springframework.security.core.AuthenticationException; -import org.springframework.security.web.authentication.www.BasicAuthenticationEntryPoint; -import org.springframework.stereotype.Component; - -import io.jsonwebtoken.io.IOException; - - -@Component -public class JwtAuthenticationEntryPoint extends BasicAuthenticationEntryPoint { - - @Override - public void commence(HttpServletRequest request, HttpServletResponse response, - AuthenticationException authException) throws IOException, java.io.IOException { - - response.setStatus(HttpServletResponse.SC_UNAUTHORIZED); - response.setContentType("application/json"); - response.getWriter().write("{ \"message\": \"" + authException.getMessage() + "\" }"); - } - - @Override - public void afterPropertiesSet() { - setRealmName("JWT Authentication"); - super.afterPropertiesSet(); - } -} - diff --git a/src/main/java/com/olympus/hermione/security/utility/JwtTokenProvider.java b/src/main/java/com/olympus/hermione/security/utility/JwtTokenProvider.java deleted file mode 100644 index d2f0b34..0000000 --- a/src/main/java/com/olympus/hermione/security/utility/JwtTokenProvider.java +++ /dev/null @@ -1,76 +0,0 @@ -package com.olympus.hermione.security.utility; - -import org.springframework.stereotype.Component; - -import io.jsonwebtoken.*; -import io.jsonwebtoken.security.Keys; -import io.jsonwebtoken.security.SignatureException; -import jakarta.servlet.http.HttpServletRequest; -import lombok.extern.slf4j.Slf4j; -import org.springframework.security.core.Authentication; -import org.springframework.security.core.userdetails.UserDetails; -import org.springframework.util.StringUtils; -import java.security.Key; -import java.util.Date; - -@Component -@Slf4j -public class JwtTokenProvider { - - Key key = Keys.secretKeyFor(SignatureAlgorithm.HS512); - - public String createToken(Authentication authentication) { - - UserDetails userDetails = (UserDetails) authentication.getPrincipal(); - Date now = new Date(); - Date expiryDate = new Date(now.getTime() + 3600000); - - return Jwts.builder() - .setSubject(userDetails.getUsername()) - .setIssuedAt(new Date()) - .setExpiration(expiryDate) - .signWith(SignatureAlgorithm.HS512, key) - .compact(); - } - - - public String resolveToken(HttpServletRequest request) { - - String bearerToken = request.getHeader("Authorization"); - if (StringUtils.hasText(bearerToken) && bearerToken.startsWith("Bearer ")) { - return bearerToken.substring(7); - } - return null; - } - - // Check if the token is valid and not expired - public boolean validateToken(String token) { - - try { - Jwts.parser().setSigningKey(key).parseClaimsJws(token); - return true; - } catch (MalformedJwtException ex) { - log.error("Invalid JWT token"); - } catch (ExpiredJwtException ex) { - log.error("Expired JWT token"); - } catch (UnsupportedJwtException ex) { - log.error("Unsupported JWT token"); - } catch (IllegalArgumentException ex) { - log.error("JWT claims string is empty"); - } catch (SignatureException e) { - log.error("there is an error with the signature of you token "); - } - return false; - } - - // Extract the username from the JWT token - public String getUsername(String token) { - - return Jwts.parser() - .setSigningKey(key) - .parseClaimsJws(token) - .getBody() - .getSubject(); - } -} -