Skip to content

Commit f9cf8b1

Browse files
mchugunovmaibin
authored andcommitted
BAEL-2443: Implement JsonView filtering based on Spring security (eugenp#6254)
* BAEL-2443: Implement filtering with @JSONVIEW based on spring security role * Cleanup test * Rename tests * Fix renaming roles after refactoring
1 parent 6dde5fc commit f9cf8b1

File tree

12 files changed

+556
-0
lines changed

12 files changed

+556
-0
lines changed

pom.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -733,6 +733,7 @@
733733
<module>spring-security-mvc-boot</module>
734734
<module>spring-security-mvc-custom</module>
735735
<module>spring-security-mvc-digest-auth</module>
736+
<module>spring-security-mvc-jsonview</module>
736737
<module>spring-security-mvc-ldap</module>
737738
<module>spring-security-mvc-login</module>
738739
<module>spring-security-mvc-persisted-remember-me</module>
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
*.class
2+
3+
#folders#
4+
/target
5+
/neoDb*
6+
/data
7+
/src/main/webapp/WEB-INF/classes
8+
*/META-INF/*
9+
10+
# Packaged files #
11+
*.jar
12+
*.war
13+
*.ear
Lines changed: 222 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,222 @@
1+
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
2+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
3+
<modelVersion>4.0.0</modelVersion>
4+
5+
<groupId>com.baeldung</groupId>
6+
<artifactId>spring-security-mvc-jsonview</artifactId>
7+
<version>0.1-SNAPSHOT</version>
8+
<name>spring-security-mvc-jsonview</name>
9+
<packaging>war</packaging>
10+
11+
<parent>
12+
<groupId>com.baeldung</groupId>
13+
<artifactId>parent-spring-5</artifactId>
14+
<version>0.0.1-SNAPSHOT</version>
15+
<relativePath>../parent-spring-5</relativePath>
16+
</parent>
17+
18+
<dependencies>
19+
20+
<dependency>
21+
<groupId>com.fasterxml.jackson.core</groupId>
22+
<artifactId>jackson-core</artifactId>
23+
<version>2.9.7</version>
24+
</dependency>
25+
<dependency>
26+
<groupId>com.fasterxml.jackson.core</groupId>
27+
<artifactId>jackson-annotations</artifactId>
28+
<version>2.9.7</version>
29+
</dependency>
30+
<dependency>
31+
<groupId>com.fasterxml.jackson.core</groupId>
32+
<artifactId>jackson-databind</artifactId>
33+
<version>2.9.7</version>
34+
</dependency>
35+
36+
<!-- Spring Security -->
37+
38+
<dependency>
39+
<groupId>org.springframework.security</groupId>
40+
<artifactId>spring-security-web</artifactId>
41+
<version>${org.springframework.security.version}</version>
42+
</dependency>
43+
<dependency>
44+
<groupId>org.springframework.security</groupId>
45+
<artifactId>spring-security-config</artifactId>
46+
<version>${org.springframework.security.version}</version>
47+
</dependency>
48+
<dependency>
49+
<groupId>org.springframework.security</groupId>
50+
<artifactId>spring-security-taglibs</artifactId>
51+
<version>${org.springframework.security.version}</version>
52+
</dependency>
53+
54+
<!-- Spring -->
55+
56+
<dependency>
57+
<groupId>org.springframework</groupId>
58+
<artifactId>spring-core</artifactId>
59+
<version>${spring.version}</version>
60+
<exclusions>
61+
<exclusion>
62+
<artifactId>commons-logging</artifactId>
63+
<groupId>commons-logging</groupId>
64+
</exclusion>
65+
</exclusions>
66+
</dependency>
67+
<dependency>
68+
<groupId>org.springframework</groupId>
69+
<artifactId>spring-context</artifactId>
70+
<version>${spring.version}</version>
71+
</dependency>
72+
<dependency>
73+
<groupId>org.springframework</groupId>
74+
<artifactId>spring-jdbc</artifactId>
75+
<version>${spring.version}</version>
76+
</dependency>
77+
<dependency>
78+
<groupId>org.springframework</groupId>
79+
<artifactId>spring-beans</artifactId>
80+
<version>${spring.version}</version>
81+
</dependency>
82+
<dependency>
83+
<groupId>org.springframework</groupId>
84+
<artifactId>spring-aop</artifactId>
85+
<version>${spring.version}</version>
86+
</dependency>
87+
<dependency>
88+
<groupId>org.springframework</groupId>
89+
<artifactId>spring-tx</artifactId>
90+
<version>${spring.version}</version>
91+
</dependency>
92+
<dependency>
93+
<groupId>org.springframework</groupId>
94+
<artifactId>spring-expression</artifactId>
95+
<version>${spring.version}</version>
96+
</dependency>
97+
98+
<dependency>
99+
<groupId>org.springframework</groupId>
100+
<artifactId>spring-web</artifactId>
101+
<version>${spring.version}</version>
102+
</dependency>
103+
<dependency>
104+
<groupId>org.springframework</groupId>
105+
<artifactId>spring-webmvc</artifactId>
106+
<version>${spring.version}</version>
107+
</dependency>
108+
109+
<!-- web -->
110+
111+
<dependency>
112+
<groupId>javax.servlet</groupId>
113+
<artifactId>javax.servlet-api</artifactId>
114+
<version>${javax.servlet.version}</version>
115+
<scope>provided</scope>
116+
</dependency>
117+
118+
<dependency>
119+
<groupId>javax.servlet</groupId>
120+
<artifactId>jstl</artifactId>
121+
<version>${jstl.version}</version>
122+
<scope>runtime</scope>
123+
</dependency>
124+
125+
<!-- test scoped -->
126+
127+
<dependency>
128+
<groupId>org.springframework</groupId>
129+
<artifactId>spring-test</artifactId>
130+
<version>${spring.version}</version>
131+
<scope>test</scope>
132+
</dependency>
133+
<dependency>
134+
<groupId>org.springframework.security</groupId>
135+
<artifactId>spring-security-test</artifactId>
136+
<version>${org.springframework.security.version}</version>
137+
<scope>test</scope>
138+
</dependency>
139+
<dependency>
140+
<groupId>com.jayway.jsonpath</groupId>
141+
<artifactId>json-path</artifactId>
142+
<version>2.4.0</version>
143+
<scope>test</scope>
144+
</dependency>
145+
146+
</dependencies>
147+
148+
<build>
149+
<finalName>spring-security-mvc-jsonview</finalName>
150+
<resources>
151+
<resource>
152+
<directory>src/main/resources</directory>
153+
<filtering>true</filtering>
154+
</resource>
155+
</resources>
156+
157+
<plugins>
158+
159+
<plugin>
160+
<groupId>org.apache.maven.plugins</groupId>
161+
<artifactId>maven-war-plugin</artifactId>
162+
<version>${maven-war-plugin.version}</version>
163+
<executions>
164+
<execution>
165+
<id>default-war</id>
166+
<phase>prepare-package</phase>
167+
<configuration>
168+
<failOnMissingWebXml>false</failOnMissingWebXml>
169+
</configuration>
170+
</execution>
171+
</executions>
172+
</plugin>
173+
174+
<plugin>
175+
<groupId>org.codehaus.cargo</groupId>
176+
<artifactId>cargo-maven2-plugin</artifactId>
177+
<version>${cargo-maven2-plugin.version}</version>
178+
<configuration>
179+
<deployables>
180+
<deployable>
181+
<location>${project.build.directory}/${project.name}.war</location>
182+
<type>war</type>
183+
<properties>
184+
<context>/</context>
185+
</properties>
186+
</deployable>
187+
</deployables>
188+
<container>
189+
<timeout>2400000</timeout>
190+
<containerId>tomcat8x</containerId>
191+
<type>embedded</type>
192+
<systemProperties>
193+
<!-- <provPersistenceTarget>cargo</provPersistenceTarget> -->
194+
</systemProperties>
195+
</container>
196+
<configuration>
197+
<properties>
198+
<cargo.servlet.port>8084</cargo.servlet.port>
199+
</properties>
200+
</configuration>
201+
</configuration>
202+
</plugin>
203+
204+
</plugins>
205+
206+
</build>
207+
208+
<properties>
209+
<!-- Spring -->
210+
<org.springframework.security.version>5.0.5.RELEASE</org.springframework.security.version>
211+
212+
<!-- various -->
213+
<javax.servlet.version>3.1.0</javax.servlet.version>
214+
<jstl.version>1.2</jstl.version>
215+
216+
<!-- Maven plugins -->
217+
<maven-war-plugin.version>2.6</maven-war-plugin.version>
218+
<cargo-maven2-plugin.version>1.6.1</cargo-maven2-plugin.version>
219+
220+
</properties>
221+
222+
</project>
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package com.baeldung;
2+
3+
import javax.servlet.ServletContext;
4+
import javax.servlet.ServletException;
5+
import javax.servlet.ServletRegistration;
6+
7+
import org.springframework.web.WebApplicationInitializer;
8+
import org.springframework.web.context.ContextLoaderListener;
9+
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
10+
import org.springframework.web.context.support.GenericWebApplicationContext;
11+
import org.springframework.web.filter.DelegatingFilterProxy;
12+
import org.springframework.web.servlet.DispatcherServlet;
13+
14+
public class AppInitializer implements WebApplicationInitializer {
15+
16+
@Override
17+
public void onStartup(final ServletContext sc) throws ServletException {
18+
19+
AnnotationConfigWebApplicationContext root = new AnnotationConfigWebApplicationContext();
20+
21+
root.scan("com.baeldung");
22+
sc.addListener(new ContextLoaderListener(root));
23+
24+
ServletRegistration.Dynamic appServlet = sc.addServlet("mvc", new DispatcherServlet(new GenericWebApplicationContext()));
25+
appServlet.setLoadOnStartup(1);
26+
appServlet.addMapping("/");
27+
28+
sc.addFilter("securityFilter", new DelegatingFilterProxy("springSecurityFilterChain"))
29+
.addMappingForUrlPatterns(null, false, "/*");
30+
31+
}
32+
33+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package com.baeldung.controller;
2+
3+
import com.baeldung.model.Item;
4+
import org.springframework.web.bind.annotation.RequestMapping;
5+
import org.springframework.web.bind.annotation.RestController;
6+
7+
import javax.servlet.http.HttpServletRequest;
8+
import javax.servlet.http.HttpServletResponse;
9+
import java.util.ArrayList;
10+
import java.util.Arrays;
11+
import java.util.Collection;
12+
13+
@RestController
14+
public class ItemsController {
15+
16+
@RequestMapping("/items")
17+
public Collection<Item> getItems() {
18+
return Arrays.asList(new Item(1, "Item 1", "Frank"), new Item(2, "Item 2", "Bob"));
19+
}
20+
21+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package com.baeldung.controller;
2+
3+
import com.baeldung.spring.AppConfig.Role;
4+
5+
import java.util.HashMap;
6+
import java.util.Map;
7+
8+
public class View {
9+
10+
public static final Map<Role, Class> MAPPING = new HashMap<>();
11+
12+
static {
13+
MAPPING.put(Role.ROLE_ADMIN, Admin.class);
14+
MAPPING.put(Role.ROLE_USER, User.class);
15+
}
16+
17+
public static class User {
18+
19+
}
20+
21+
public static class Admin extends User {
22+
23+
}
24+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package com.baeldung.model;
2+
3+
import com.baeldung.controller.View;
4+
import com.fasterxml.jackson.annotation.JsonView;
5+
6+
public class Item {
7+
8+
@JsonView(View.User.class)
9+
private int id;
10+
@JsonView(View.User.class)
11+
private String name;
12+
@JsonView(View.Admin.class)
13+
private String ownerName;
14+
15+
public Item(int id, String name, String ownerName) {
16+
this.id = id;
17+
this.name = name;
18+
this.ownerName = ownerName;
19+
}
20+
21+
public int getId() {
22+
return id;
23+
}
24+
25+
public String getName() {
26+
return name;
27+
}
28+
29+
public String getOwnerName() {
30+
return ownerName;
31+
}
32+
}

0 commit comments

Comments
 (0)