Skip to content

Commit 7972276

Browse files
committed
URLRewrite implementation in Spring Boot
(cherry picked from commit aea40e5)
1 parent 32b638d commit 7972276

File tree

3 files changed

+79
-31
lines changed

3 files changed

+79
-31
lines changed

common/src/main/java/com/genexus/URLRouter.java

Lines changed: 53 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@
1212

1313
import java.io.*;
1414
import java.util.regex.Pattern;
15+
import org.springframework.core.io.Resource;
16+
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
1517

1618

1719
public class URLRouter
@@ -120,14 +122,33 @@ private static String convertParmsToQueryString(boolean useNamedParameters, Stri
120122
return queryString;
121123
}
122124

123-
private static void load()
124-
{
125-
String line;
126-
InputStream is = null;
127-
String defaultPath = SpecificImplementation.Application.getModelContext().getHttpContext().getDefaultPath();
125+
private static void load() {
126+
if (com.genexus.ApplicationContext.getInstance().isSpringBootApp())
127+
loadRewriteFilesSB();
128+
else
129+
loadRewriteFiles();
130+
}
131+
132+
private static void loadRewriteFilesSB() {
133+
PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
134+
try {
135+
Resource[] resources = resolver.getResources("./*.rewrite");
136+
for (Resource resource : resources) {
137+
loadRewriteInputStream(resource.getInputStream());
138+
}
139+
}
140+
catch (IOException e)
141+
{
142+
logger.error(e.toString(), e);
143+
}
144+
}
145+
146+
private static void loadRewriteFiles() {
128147
String appPackage = SpecificImplementation.Application.getClientPreferences().getPACKAGE();
129-
if (!appPackage.equals(""))
148+
if (!appPackage.equals(""))
130149
appPackage = File.separatorChar + appPackage.replace('.', File.separatorChar);
150+
InputStream is;
151+
String defaultPath = SpecificImplementation.Application.getModelContext().getHttpContext().getDefaultPath();
131152
String classesDirectoryPath = defaultPath + File.separator + "WEB-INF" + File.separatorChar + "classes" + appPackage;
132153
GXDirectory classesDirectory = new GXDirectory(classesDirectoryPath);
133154
GXFileCollection rewriteFiles = classesDirectory.getFiles(".rewrite");
@@ -137,37 +158,39 @@ private static void load()
137158
{
138159
serverRelative = true;
139160
AbstractGXFile rewriteFile = rewriteFiles.item(i);
140-
try
141-
{
142-
is = SpecificImplementation.Messages.getInputStream(rewriteFile.getName());
161+
is = SpecificImplementation.Messages.getInputStream(rewriteFile.getName());
143162

144-
if (is != null)
145-
{
146-
try (BufferedReader bufread = new BufferedReader(new InputStreamReader(is, "UTF8"))) {
147-
line = bufread.readLine();
148-
while (line != null) {
149-
parseLine(line);
150-
line = bufread.readLine();
151-
}
152-
}
153-
}
154-
}
155-
catch (UnsupportedEncodingException e)
163+
if (is != null)
156164
{
157-
logger.error(e.toString(), e);
158-
}
159-
catch (FileNotFoundException e)
160-
{
161-
logger.info("There is no URLRouter file");
162-
}
163-
catch (IOException e)
164-
{
165-
logger.error(e.toString(), e);
165+
loadRewriteInputStream(is);
166166
}
167167
}
168168
}
169169
}
170170

171+
private static void loadRewriteInputStream(InputStream is) {
172+
String line;
173+
try (BufferedReader bufread = new BufferedReader(new InputStreamReader(is, "UTF8"))) {
174+
line = bufread.readLine();
175+
while (line != null) {
176+
parseLine(line);
177+
line = bufread.readLine();
178+
}
179+
}
180+
catch (UnsupportedEncodingException e)
181+
{
182+
logger.error(e.toString(), e);
183+
}
184+
catch (FileNotFoundException e)
185+
{
186+
logger.info("There is no URLRouter file");
187+
}
188+
catch (IOException e)
189+
{
190+
logger.error(e.toString(), e);
191+
}
192+
}
193+
171194
private static void parseLine(String line)
172195
{
173196
int len = line.length();

gxspringboot/pom.xml

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,12 @@
3535
<artifactId>spring-boot-starter-web</artifactId>
3636
<version>3.1.2</version>
3737
<scope>provided</scope>
38-
</dependency>
38+
</dependency>
39+
<dependency>
40+
<groupId>org.tuckey</groupId>
41+
<artifactId>urlrewritefilter</artifactId>
42+
<version>5.1.3</version>
43+
</dependency>
3944
</dependencies>
4045

4146
<build>

gxspringboot/src/main/java/com/genexus/springboot/GXConfig.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,23 @@
44
import com.genexus.common.interfaces.SpecificImplementation;
55
import com.genexus.diagnostics.core.ILogger;
66
import com.genexus.diagnostics.core.LogManager;
7+
import org.springframework.boot.web.servlet.FilterRegistrationBean;
78
import org.springframework.beans.factory.annotation.Value;
9+
import org.springframework.context.annotation.Bean;
810
import org.springframework.context.annotation.Configuration;
11+
import org.springframework.core.io.ClassPathResource;
912
import org.springframework.util.AntPathMatcher;
1013
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
1114
import org.springframework.web.servlet.config.annotation.PathMatchConfigurer;
1215
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
1316
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
17+
import org.tuckey.web.filters.urlrewrite.UrlRewriteFilter;
1418

1519
@Configuration
1620
@EnableWebMvc
1721
public class GXConfig implements WebMvcConfigurer {
1822
public static final ILogger logger = LogManager.getLogger(GXConfig.class);
23+
private static final String REWRITE_FILE = "rewrite.config";
1924

2025
@Override
2126
public void configurePathMatch(PathMatchConfigurer configurer) {
@@ -45,4 +50,19 @@ public void addResourceHandlers(ResourceHandlerRegistry registry) {
4550
logger.error("Error setting context folders ", e);
4651
}
4752
}
53+
54+
@Bean
55+
public FilterRegistrationBean<UrlRewriteFilter> urlRewriteFilter() {
56+
FilterRegistrationBean<UrlRewriteFilter> registrationBean = new FilterRegistrationBean<>();
57+
registrationBean.setFilter(new UrlRewriteFilter());
58+
registrationBean.addUrlPatterns("/*");
59+
if (new ClassPathResource(REWRITE_FILE).exists()) {
60+
registrationBean.addInitParameter("modRewriteConf", "true");
61+
registrationBean.addInitParameter("confPath", REWRITE_FILE);
62+
}
63+
else {
64+
registrationBean.setEnabled(false);
65+
}
66+
return registrationBean;
67+
}
4868
}

0 commit comments

Comments
 (0)