Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 15 additions & 5 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.0.RELEASE</version>
<version>3.1.2</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>

Expand All @@ -40,9 +40,9 @@
</exclusions>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<groupId>jakarta.servlet</groupId>
<artifactId>jakarta.servlet-api</artifactId>
<version>6.0.0</version>
<scope>provided</scope>
</dependency>
<dependency>
Expand All @@ -52,7 +52,7 @@
<dependency>
<groupId>org.springframework.security.oauth.boot</groupId>
<artifactId>spring-security-oauth2-autoconfigure</artifactId>
<version>2.1.0.RELEASE</version>
<version>2.1.3.RELEASE</version>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
Expand All @@ -69,6 +69,16 @@
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>

</dependencies>

<build>
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/net/reliqs/gleeometer/errors/ApiError.java
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
import org.springframework.validation.FieldError;
import org.springframework.validation.ObjectError;

import javax.validation.ConstraintViolation;
import jakarta.validation.ConstraintViolation;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@
import org.springframework.security.access.AccessDeniedException;
import org.springframework.security.web.access.AccessDeniedHandler;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

public class CustomAccessDeniedHandler implements AccessDeniedHandler {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@
import org.springframework.security.web.AuthenticationEntryPoint;
import org.springframework.stereotype.Component;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;

import static org.springframework.http.HttpStatus.UNAUTHORIZED;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
import org.springframework.web.servlet.NoHandlerFoundException;
import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler;

import javax.validation.ConstraintViolationException;
import jakarta.validation.ConstraintViolationException;

import static org.springframework.http.HttpStatus.*;

Expand All @@ -42,7 +42,7 @@ public class RestExceptionHandler extends ResponseEntityExceptionHandler {
* @param request WebRequest
* @return the ApiError object
*/
@Override

protected ResponseEntity<Object> handleMissingServletRequestParameter(
MissingServletRequestParameterException ex, HttpHeaders headers,
HttpStatus status, WebRequest request) {
Expand All @@ -60,7 +60,7 @@ protected ResponseEntity<Object> handleMissingServletRequestParameter(
* @param request WebRequest
* @return the ApiError object
*/
@Override

protected ResponseEntity<Object> handleHttpMediaTypeNotSupported(
HttpMediaTypeNotSupportedException ex,
HttpHeaders headers,
Expand All @@ -82,7 +82,6 @@ protected ResponseEntity<Object> handleHttpMediaTypeNotSupported(
* @param request WebRequest
* @return the ApiError object
*/
@Override
protected ResponseEntity<Object> handleMethodArgumentNotValid(
MethodArgumentNotValidException ex,
HttpHeaders headers,
Expand All @@ -104,7 +103,7 @@ protected ResponseEntity<Object> handleMethodArgumentNotValid(
* @param request WebRequest
* @return the ApiError object
*/
@Override

protected ResponseEntity<Object> handleHttpMessageNotReadable(HttpMessageNotReadableException ex, HttpHeaders headers, HttpStatus status, WebRequest request) {
ServletWebRequest servletWebRequest = (ServletWebRequest) request;
log.info("{} to {}", servletWebRequest.getHttpMethod(), servletWebRequest.getRequest().getServletPath());
Expand All @@ -121,13 +120,13 @@ protected ResponseEntity<Object> handleHttpMessageNotReadable(HttpMessageNotRead
* @param request WebRequest
* @return the ApiError object
*/
@Override

protected ResponseEntity<Object> handleHttpMessageNotWritable(HttpMessageNotWritableException ex, HttpHeaders headers, HttpStatus status, WebRequest request) {
String error = "Error writing JSON output";
return buildResponseEntity(new ApiError(HttpStatus.INTERNAL_SERVER_ERROR, error, ex));
}

@Override

protected ResponseEntity<Object> handleNoHandlerFoundException(
NoHandlerFoundException ex, HttpHeaders headers, HttpStatus status, WebRequest request) {
ApiError apiError = new ApiError(BAD_REQUEST);
Expand All @@ -137,22 +136,22 @@ protected ResponseEntity<Object> handleNoHandlerFoundException(
}

/**
* Handles javax.validation.ConstraintViolationException. Thrown when @Validated fails.
* Handles jakarta.validation.ConstraintViolationException. Thrown when @Validated fails.
*
* @param ex the ConstraintViolationException
* @return the ApiError object
*/
@ExceptionHandler(javax.validation.ConstraintViolationException.class)
@ExceptionHandler(jakarta.validation.ConstraintViolationException.class)
protected ResponseEntity<Object> handleConstraintViolation(
javax.validation.ConstraintViolationException ex) {
jakarta.validation.ConstraintViolationException ex) {
ApiError apiError = new ApiError(BAD_REQUEST);
apiError.setMessage("Validation error");
apiError.addValidationErrors(ex.getConstraintViolations());
return buildResponseEntity(apiError);
}

/**
* Handles EntityNotFoundException. Created to encapsulate errors with more detail than javax.persistence.EntityNotFoundException.
* Handles EntityNotFoundException. Created to encapsulate errors with more detail than jakarta.persistence.EntityNotFoundException.
*
* @param ex the EntityNotFoundException
* @return the ApiError object
Expand All @@ -166,10 +165,10 @@ protected ResponseEntity<Object> handleEntityNotFound(
}

/**
* Handle javax.persistence.EntityNotFoundException
* Handle jakarta.persistence.EntityNotFoundException
*/
@ExceptionHandler(javax.persistence.EntityNotFoundException.class)
protected ResponseEntity<Object> handleEntityNotFound(javax.persistence.EntityNotFoundException ex) {
@ExceptionHandler(jakarta.persistence.EntityNotFoundException.class)
protected ResponseEntity<Object> handleEntityNotFound(jakarta.persistence.EntityNotFoundException ex) {
return buildResponseEntity(new ApiError(NOT_FOUND, ex));
}

Expand Down
6 changes: 3 additions & 3 deletions src/main/java/net/reliqs/gleeometer/glee/Glee.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@
import lombok.ToString;
import net.reliqs.gleeometer.users.User;

import javax.persistence.*;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import jakarta.persistence.*;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import java.time.LocalDate;
import java.time.LocalTime;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;
import jakarta.validation.Valid;
import java.time.LocalDate;
import java.time.LocalTime;

Expand Down
3 changes: 2 additions & 1 deletion src/main/java/net/reliqs/gleeometer/glee/GleeRepository.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,9 @@
import net.reliqs.gleeometer.users.User;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.repository.PagingAndSortingRepository;

interface GleeRepository extends PagingAndSortingRepository<Glee, Long>, GleeRepositoryCustom {
interface GleeRepository extends JpaRepository<Glee, Long>, GleeRepositoryCustom {
Page<Glee> findAllByUser(User user, Pageable pageable);
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,10 @@
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import javax.persistence.TypedQuery;
import jakarta.persistence.EntityManager;
import jakarta.persistence.PersistenceContext;
import jakarta.persistence.Query;
import jakarta.persistence.TypedQuery;
import java.time.LocalDate;
import java.time.LocalTime;
import java.util.HashMap;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
public class AngularWebConfig implements WebMvcConfigurer {

@Override
public void addViewControllers(ViewControllerRegistry registry) {
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("{path:^(?!(?:oauth|api|index.html)).*$}/**").setViewName("forward:/index.html");
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import org.springframework.security.oauth2.config.annotation.web.configuration.EnableResourceServer;
import org.springframework.security.oauth2.config.annotation.web.configuration.ResourceServerConfigurerAdapter;
import org.springframework.security.oauth2.config.annotation.web.configurers.ResourceServerSecurityConfigurer;
import org.springframework.security.web.SecurityFilterChain;

@Configuration
@EnableResourceServer
Expand All @@ -23,21 +24,26 @@ public void configure(ResourceServerSecurityConfigurer resources) {
resources.resourceId("api");
}

@Override
public void configure(HttpSecurity http) throws Exception {
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and()
.antMatcher("/api/**")
.authorizeRequests()
.antMatchers("/api/signin**").permitAll()
.antMatchers("/api/signin/**").permitAll()
.antMatchers("/api/glee**").hasAnyAuthority("ADMIN", "USER")
.antMatchers("/api/users**").hasAuthority("ADMIN")
.antMatchers("/api/**").authenticated()
.anyRequest().authenticated()
.and()
.exceptionHandling().authenticationEntryPoint(customAuthenticationEntryPoint).accessDeniedHandler(new CustomAccessDeniedHandler());
.sessionManagement(session -> session
.sessionCreationPolicy(SessionCreationPolicy.STATELESS)
)
.securityMatcher("/api/**")
.authorizeHttpRequests(registry -> registry
.requestMatchers("/api/signin**").permitAll()
.requestMatchers("/api/signin/**").permitAll()
.requestMatchers("/api/glee**").hasAnyAuthority("ADMIN", "USER")
.requestMatchers("/api/users**").hasAuthority("ADMIN")
.requestMatchers("/api/**").authenticated()
.anyRequest().authenticated()
)
.exceptionHandling(registry -> registry
.authenticationEntryPoint(customAuthenticationEntryPoint)
.accessDeniedHandler(new CustomAccessDeniedHandler())
);

return http.build();
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,8 @@
import org.springframework.security.authentication.dao.DaoAuthenticationProvider;
import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.AuthenticationException;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
Expand All @@ -17,7 +18,7 @@
//@Order(1)
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true, proxyTargetClass = true)
public class ServerSecurityConfig extends WebSecurityConfigurerAdapter {
public class ServerSecurityConfig {


private final UserDetailsService userDetailsService;
Expand All @@ -40,10 +41,4 @@ public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}

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

}
Original file line number Diff line number Diff line change
Expand Up @@ -4,17 +4,19 @@
import org.springframework.context.annotation.Profile;
import org.springframework.core.annotation.Order;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.web.SecurityFilterChain;

@Configuration
@Profile("dev")
@Order(98)
public class ServerSecurityConfigDev extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
public class ServerSecurityConfigDev {

public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http
.cors().and()
.cors().disable()
.csrf().disable();

return http.build();
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;

import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import jakarta.servlet.*;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;

@Component
Expand Down
8 changes: 4 additions & 4 deletions src/main/java/net/reliqs/gleeometer/users/User.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,10 @@
import lombok.ToString;
import net.reliqs.gleeometer.glee.Glee;

import javax.persistence.*;
import javax.validation.constraints.Email;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import jakarta.persistence.*;
import jakarta.validation.constraints.Email;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import java.util.Collection;

@Data
Expand Down
6 changes: 3 additions & 3 deletions src/main/java/net/reliqs/gleeometer/users/UserController.java
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,9 @@
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import javax.validation.ConstraintViolationException;
import javax.validation.Valid;
import javax.validation.constraints.Size;
import jakarta.validation.ConstraintViolationException;
import jakarta.validation.Valid;
import jakarta.validation.constraints.Size;
import java.util.HashSet;

@RestController
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,12 @@

import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.repository.PagingAndSortingRepository;

import java.util.Optional;

public interface UserRepository extends PagingAndSortingRepository<User, Long> {
public interface UserRepository extends JpaRepository<User, Long> {
Optional<User> findByEmail(String email);
Page<User> findByEmailContains(String email, Pageable pageable);
Page<User> findAllByEmail(String email, Pageable pageable);
Expand Down
Loading