Skip to content
Toggle navigation
Projects
Groups
Snippets
Help
Linnea Samila
/
Moya
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Wiki
Settings
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit 690b826c
authored
Nov 08, 2014
by
Tuomas Riihimäki
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
JsonP filter for /rest/* urls
1 parent
8f96083b
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
76 additions
and
17 deletions
code/moya-web/WebContent/WEB-INF/web.xml
code/moya-web/src/main/java/fi/codecrew/moya/HostnameFilter.java
code/moya-web/src/main/java/fi/codecrew/moya/rest/JsonpRestFilter.java
code/moya-web/WebContent/WEB-INF/web.xml
View file @
690b826
...
@@ -18,7 +18,12 @@
...
@@ -18,7 +18,12 @@
<res-ref-name>
jsf/ProjectStage
</res-ref-name>
<res-ref-name>
jsf/ProjectStage
</res-ref-name>
<res-type>
java.lang.String
</res-type>
<res-type>
java.lang.String
</res-type>
</resource-ref>
</resource-ref>
<!-- Handle hostname filter BEFORE jsonp so errors are transmitted correctly -->
<absolute-ordering>
<name>
jsonpFilter
</name>
<name>
hostnameFilter
</name>
</absolute-ordering>
<context-param>
<context-param>
<param-name>
javax.faces.PROJECT_STAGE
</param-name>
<param-name>
javax.faces.PROJECT_STAGE
</param-name>
<param-value>
Development
</param-value>
<param-value>
Development
</param-value>
...
@@ -28,7 +33,8 @@
...
@@ -28,7 +33,8 @@
req.queryString and req.userAgent to logger MDC -->
req.queryString and req.userAgent to logger MDC -->
<filter>
<filter>
<filter-name>
MDCInsertingServletFilter
</filter-name>
<filter-name>
MDCInsertingServletFilter
</filter-name>
<filter-class>
ch.qos.logback.classic.helpers.MDCInsertingServletFilter
</filter-class>
<filter-class>
ch.qos.logback.classic.helpers.MDCInsertingServletFilter
</filter-class>
</filter>
</filter>
<filter-mapping>
<filter-mapping>
<filter-name>
MDCInsertingServletFilter
</filter-name>
<filter-name>
MDCInsertingServletFilter
</filter-name>
...
@@ -41,20 +47,14 @@
...
@@ -41,20 +47,14 @@
<filter-class>
org.primefaces.webapp.filter.FileUploadFilter
<filter-class>
org.primefaces.webapp.filter.FileUploadFilter
</filter-class>
</filter-class>
</filter>
</filter>
<filter>
<display-name>
HostnameFilter
</display-name>
<filter-name>
HostnameFilter
</filter-name>
<filter-class>
fi.codecrew.moya.HostnameFilter
</filter-class>
</filter>
<filter-mapping>
<filter-mapping>
<filter-name>
PrimefacesFileupload
</filter-name>
<filter-name>
PrimefacesFileupload
</filter-name>
<servlet-name>
Faces Servlet
</servlet-name>
<servlet-name>
Faces Servlet
</servlet-name>
</filter-mapping>
</filter-mapping>
<filter-mapping>
<!-- <filter> <display-name>HostnameFilter</display-name> <filter-name>HostnameFilter</filter-name>
<filter-name>
HostnameFilter
</filter-name>
<filter-class>fi.codecrew.moya.HostnameFilter</filter-class> </filter> <filter-mapping>
<servlet-name>
*
</servlet-name>
<filter-name>HostnameFilter</filter-name> <servlet-name>*</servlet-name>
</filter-mapping>
</filter-mapping> -->
<servlet>
<servlet>
<servlet-name>
Faces Servlet
</servlet-name>
<servlet-name>
Faces Servlet
</servlet-name>
<servlet-class>
javax.faces.webapp.FacesServlet
</servlet-class>
<servlet-class>
javax.faces.webapp.FacesServlet
</servlet-class>
...
@@ -115,5 +115,5 @@
...
@@ -115,5 +115,5 @@
<persistence-unit-ref>
<persistence-unit-ref>
<persistence-unit-ref-name>
BortalEMF
</persistence-unit-ref-name>
<persistence-unit-ref-name>
BortalEMF
</persistence-unit-ref-name>
</persistence-unit-ref>
</persistence-unit-ref>
</web-app>
</web-app>
\ No newline at end of file
code/moya-web/src/main/java/fi/codecrew/moya/HostnameFilter.java
View file @
690b826
...
@@ -31,9 +31,11 @@ import javax.servlet.FilterConfig;
...
@@ -31,9 +31,11 @@ import javax.servlet.FilterConfig;
import
javax.servlet.ServletException
;
import
javax.servlet.ServletException
;
import
javax.servlet.ServletRequest
;
import
javax.servlet.ServletRequest
;
import
javax.servlet.ServletResponse
;
import
javax.servlet.ServletResponse
;
import
javax.servlet.annotation.WebFilter
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletResponse
;
import
javax.servlet.http.HttpServletResponse
;
import
org.apache.http.HttpRequest
;
import
org.slf4j.Logger
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.slf4j.LoggerFactory
;
import
org.slf4j.MDC
;
import
org.slf4j.MDC
;
...
@@ -47,6 +49,7 @@ import fi.codecrew.moya.rest.RestApplicationEntrypoint;
...
@@ -47,6 +49,7 @@ import fi.codecrew.moya.rest.RestApplicationEntrypoint;
/**
/**
* Servlet Filter implementation class HostnameFilter
* Servlet Filter implementation class HostnameFilter
*/
*/
@WebFilter
(
filterName
=
"hostnameFilter"
,
displayName
=
"hostname and authentication filter"
,
urlPatterns
=
{
"/*"
})
public
class
HostnameFilter
implements
Filter
{
public
class
HostnameFilter
implements
Filter
{
private
static
final
Logger
logger
=
LoggerFactory
.
getLogger
(
HostnameFilter
.
class
);
private
static
final
Logger
logger
=
LoggerFactory
.
getLogger
(
HostnameFilter
.
class
);
...
@@ -90,7 +93,6 @@ public class HostnameFilter implements Filter {
...
@@ -90,7 +93,6 @@ public class HostnameFilter implements Filter {
UNKNOWN
,
ANON
,
REST
,
USER
UNKNOWN
,
ANON
,
REST
,
USER
}
}
/**
/**
* Add user information to SLF4J MDC context, so current user can be shown
* Add user information to SLF4J MDC context, so current user can be shown
* in logs.
* in logs.
...
@@ -102,12 +104,12 @@ public class HostnameFilter implements Filter {
...
@@ -102,12 +104,12 @@ public class HostnameFilter implements Filter {
Principal
userPrincipal
=
request
.
getUserPrincipal
();
Principal
userPrincipal
=
request
.
getUserPrincipal
();
if
(
userPrincipal
!=
null
)
{
if
(
userPrincipal
!=
null
)
{
String
userString
=
userPrincipal
.
getName
();
String
userString
=
userPrincipal
.
getName
();
MDC
.
put
(
"user"
,
userString
);
MDC
.
put
(
"user"
,
userString
);
MDC
.
put
(
"authtype"
,
authType
!=
null
?
authType
.
name
()
:
"null"
);
MDC
.
put
(
"authtype"
,
authType
!=
null
?
authType
.
name
()
:
"null"
);
}
else
{
}
else
{
MDC
.
put
(
"user"
,
"null"
);
MDC
.
put
(
"user"
,
"null"
);
MDC
.
put
(
"authtype"
,
"null"
);
MDC
.
put
(
"authtype"
,
"null"
);
}
}
}
}
/**
/**
...
@@ -223,9 +225,9 @@ public class HostnameFilter implements Filter {
...
@@ -223,9 +225,9 @@ public class HostnameFilter implements Filter {
protected
void
parseHostname
(
HttpServletRequest
httpRequest
)
protected
void
parseHostname
(
HttpServletRequest
httpRequest
)
{
{
//
logger.info("Path info {}", httpRequest.getPathInfo()); // null
//
logger.info("Path info {}", httpRequest.getPathInfo()); // null
// logger.info("querystring {}", httpRequest.getQueryString()); // ln=primefaces&v=4.0
// logger.info("querystring {}", httpRequest.getQueryString()); // ln=primefaces&v=4.0
//
logger.info("ctxpath {}", httpRequest.getContextPath()); // /MoyaWeb
//
logger.info("ctxpath {}", httpRequest.getContextPath()); // /MoyaWeb
// logger.info("pathTranslated {}", httpRequest.getPathTranslated()); // null
// logger.info("pathTranslated {}", httpRequest.getPathTranslated()); // null
// logger.info("requestUri {}", httpRequest.getRequestURI()); // /MoyaWeb/javax.faces.resource/jquery/jquery.js.jsf
// logger.info("requestUri {}", httpRequest.getRequestURI()); // /MoyaWeb/javax.faces.resource/jquery/jquery.js.jsf
// logger.info("URL {}", httpRequest.getRequestURL().toString()); // http://localhost:8080/MoyaWeb/javax.faces.resource/jquery/jquery.js.jsf
// logger.info("URL {}", httpRequest.getRequestURL().toString()); // http://localhost:8080/MoyaWeb/javax.faces.resource/jquery/jquery.js.jsf
...
...
code/moya-web/src/main/java/fi/codecrew/moya/rest/JsonpRestFilter.java
0 → 100644
View file @
690b826
package
fi
.
codecrew
.
moya
.
rest
;
import
java.io.IOException
;
import
java.io.PrintWriter
;
import
java.nio.charset.Charset
;
import
javax.servlet.Filter
;
import
javax.servlet.FilterChain
;
import
javax.servlet.FilterConfig
;
import
javax.servlet.ServletException
;
import
javax.servlet.ServletOutputStream
;
import
javax.servlet.ServletRequest
;
import
javax.servlet.ServletResponse
;
import
javax.servlet.annotation.WebFilter
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
@WebFilter
(
filterName
=
"jsonpFilter"
,
displayName
=
"Rest JsonP filter"
,
urlPatterns
=
{
RestApplicationEntrypoint
.
REST_PATH
+
"/*"
})
public
class
JsonpRestFilter
implements
Filter
{
private
static
final
String
JSONP_PARAMETER
=
"jsonp"
;
private
static
final
Logger
logger
=
LoggerFactory
.
getLogger
(
JsonpRestFilter
.
class
);
private
static
final
Charset
UTF8
=
Charset
.
forName
(
"UTF-8"
);
@Override
public
void
init
(
FilterConfig
filterConfig
)
throws
ServletException
{
logger
.
info
(
"Jsonp filter started"
);
}
@Override
public
void
doFilter
(
ServletRequest
request
,
ServletResponse
response
,
FilterChain
chain
)
throws
IOException
,
ServletException
{
String
jsonpFunc
=
request
.
getParameter
(
JSONP_PARAMETER
);
boolean
useJsonp
=
jsonpFunc
!=
null
&&
!
jsonpFunc
.
isEmpty
();
ServletOutputStream
ostream
=
response
.
getOutputStream
();
if
(
useJsonp
)
{
//.... Älä käytä response.getWriter():ä... Räjähtää.
//..... Älä käytä ostream.print():ä... Tulee writellä kirjoitettujen bytejen jälkeen...
ostream
.
write
(
jsonpFunc
.
getBytes
(
UTF8
));
ostream
.
write
(
"("
.
getBytes
(
UTF8
));
}
chain
.
doFilter
(
request
,
response
);
if
(
useJsonp
)
{
ostream
.
write
(
");"
.
getBytes
(
UTF8
));
}
}
@Override
public
void
destroy
()
{
logger
.
info
(
"Jsonp filter destroyed"
);
}
}
Write
Preview
Markdown
is supported
Attach a file
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to post a comment