Update Tests and Formatting
This commit is contained in:
@@ -26,8 +26,10 @@ import org.springframework.security.authorization.method.HandleAuthorizationDeni
|
|||||||
|
|
||||||
@Target(ElementType.METHOD)
|
@Target(ElementType.METHOD)
|
||||||
@Retention(RetentionPolicy.RUNTIME)
|
@Retention(RetentionPolicy.RUNTIME)
|
||||||
@PreAuthorize(value = "hasAuthority('{value}:read')")
|
@PreAuthorize("hasAuthority('{value}:read')")
|
||||||
@HandleAuthorizationDenied(handlerClass = Null.class)
|
@HandleAuthorizationDenied(handlerClass = Null.class)
|
||||||
public @interface AuthorizeRead {
|
public @interface AuthorizeRead {
|
||||||
|
|
||||||
String value();
|
String value();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -49,17 +49,16 @@ public class DataApplication {
|
|||||||
@Bean
|
@Bean
|
||||||
public UserDetailsService userDetailsService() {
|
public UserDetailsService userDetailsService() {
|
||||||
return new InMemoryUserDetailsManager(
|
return new InMemoryUserDetailsManager(
|
||||||
User.withDefaultPasswordEncoder()
|
User.withDefaultPasswordEncoder()
|
||||||
.username("rob")
|
.username("rob")
|
||||||
.password("password")
|
.password("password")
|
||||||
.authorities("message:read", "user:read")
|
.authorities("message:read", "user:read")
|
||||||
.build(),
|
.build(),
|
||||||
User.withDefaultPasswordEncoder()
|
User.withDefaultPasswordEncoder()
|
||||||
.username("luke")
|
.username("luke")
|
||||||
.password("password")
|
.password("password")
|
||||||
.authorities("message:read")
|
.authorities("message:read")
|
||||||
.build()
|
.build());
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ import org.springframework.web.bind.annotation.RestController;
|
|||||||
|
|
||||||
@RestController
|
@RestController
|
||||||
public class MessageController {
|
public class MessageController {
|
||||||
|
|
||||||
private final MessageRepository messages;
|
private final MessageRepository messages;
|
||||||
|
|
||||||
public MessageController(MessageRepository messages) {
|
public MessageController(MessageRepository messages) {
|
||||||
|
|||||||
@@ -24,8 +24,10 @@ import org.springframework.stereotype.Component;
|
|||||||
|
|
||||||
@Component
|
@Component
|
||||||
public class Null implements MethodAuthorizationDeniedHandler {
|
public class Null implements MethodAuthorizationDeniedHandler {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Object handleDeniedInvocation(MethodInvocation methodInvocation, AuthorizationResult authorizationResult) {
|
public Object handleDeniedInvocation(MethodInvocation methodInvocation, AuthorizationResult authorizationResult) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,12 +22,9 @@ import org.junit.jupiter.api.Test;
|
|||||||
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.boot.test.context.SpringBootTest;
|
import org.springframework.boot.test.context.SpringBootTest;
|
||||||
import org.springframework.security.access.AccessDeniedException;
|
|
||||||
import org.springframework.security.test.context.support.WithMockUser;
|
import org.springframework.security.test.context.support.WithMockUser;
|
||||||
|
|
||||||
import static org.assertj.core.api.Assertions.assertThat;
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
|
|
||||||
import static org.assertj.core.api.Assertions.assertThatNoException;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Rob Winch
|
* @author Rob Winch
|
||||||
@@ -44,43 +41,44 @@ public class DataApplicationTests {
|
|||||||
List<Message> messages = this.repository.findAll();
|
List<Message> messages = this.repository.findAll();
|
||||||
assertThat(messages).hasSize(3);
|
assertThat(messages).hasSize(3);
|
||||||
for (Message message : messages) {
|
for (Message message : messages) {
|
||||||
assertThatExceptionOfType(AccessDeniedException.class).isThrownBy(message::getSummary);
|
assertThat(message.getSummary()).isNull();
|
||||||
assertThatExceptionOfType(AccessDeniedException.class).isThrownBy(message::getText);
|
assertThat(message.getText()).isNull();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@WithMockUser(username="rob", authorities="message:read")
|
@WithMockUser(username = "rob", authorities = "message:read")
|
||||||
void findAllOnlyToCurrentUserCanReadMessage() {
|
void findAllOnlyToCurrentUserCanReadMessage() {
|
||||||
List<Message> messages = this.repository.findAll();
|
List<Message> messages = this.repository.findAll();
|
||||||
assertThat(messages).hasSize(3);
|
assertThat(messages).hasSize(3);
|
||||||
for (Message message : messages) {
|
for (Message message : messages) {
|
||||||
assertThatNoException().isThrownBy(message::getSummary);
|
assertThat(message.getSummary()).isNotNull();
|
||||||
assertThatNoException().isThrownBy(message::getText);
|
assertThat(message.getText()).isNotNull();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@WithMockUser(username="rob", authorities="message:read")
|
@WithMockUser(username = "rob", authorities = "message:read")
|
||||||
void findAllOnlyToCurrentUserCantReadUserDetails() {
|
void findAllOnlyToCurrentUserCantReadUserDetails() {
|
||||||
List<Message> messages = this.repository.findAll();
|
List<Message> messages = this.repository.findAll();
|
||||||
assertThat(messages).hasSize(3);
|
assertThat(messages).hasSize(3);
|
||||||
for (Message message : messages) {
|
for (Message message : messages) {
|
||||||
User user = message.getTo();
|
User user = message.getTo();
|
||||||
assertThatExceptionOfType(AccessDeniedException.class).isThrownBy(user::getFirstName);
|
assertThat(user.getFirstName()).isNull();
|
||||||
assertThatExceptionOfType(AccessDeniedException.class).isThrownBy(user::getLastName);
|
assertThat(user.getLastName()).isNull();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@WithMockUser(username="rob", authorities={ "message:read", "user:read" })
|
@WithMockUser(username = "rob", authorities = { "message:read", "user:read" })
|
||||||
void findAllOnlyToCurrentUserCanReadUserDetails() {
|
void findAllOnlyToCurrentUserCanReadUserDetails() {
|
||||||
List<Message> messages = this.repository.findAll();
|
List<Message> messages = this.repository.findAll();
|
||||||
assertThat(messages).hasSize(3);
|
assertThat(messages).hasSize(3);
|
||||||
for (Message message : messages) {
|
for (Message message : messages) {
|
||||||
User user = message.getTo();
|
User user = message.getTo();
|
||||||
assertThatNoException().isThrownBy(user::getFirstName);
|
assertThat(user.getFirstName()).isNotNull();
|
||||||
assertThatNoException().isThrownBy(user::getLastName);
|
assertThat(user.getLastName()).isNotNull();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user