You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@myfaces.apache.org by 101questionjsf <in...@yahoo.com> on 2006/04/07 09:46:34 UTC
RE: Servlet Filter? I'm stuck
hi,
I changed the filter pattern in web.xml from /user/* to /*.jsf, then it goes
into infinite loop, keep calling login.jsf.
I tried checking the uri with endWith login.jsf and login.jsp, then stop
looping, but images and css files cannot come thru.
Anyone has a filter to spare?
<filter-mapping>
<filter-name>UserSecurity</filter-name>
<url-pattern>/*.jsf</url-pattern>
</filter-mapping>
Anyone can help?
Patrick Haggood wrote:
>
> Here's a security filter I adapted from a sample on the Java Studio
> Creator forum:
>
> First the web.xml part:
> <filter>
> <filter-name>UserSecurity</filter-name>
> <filter-class>tolls.tools.UserSecurityCheckFilter</filter-class>
> </filter>
>
>
>
> <filter-mapping>
> <filter-name>UserSecurity</filter-name>
> <url-pattern>/user/*</url-pattern>
> </filter-mapping>
>
> Now the filter:
>
> /*
> * UserSecurityCheckFilter.java
> *
> * Created on 30 December 2004, 23:36
> */
>
> package tolls.tools;
>
> import java.io.IOException;
>
> import javax.servlet.Filter;
> import javax.servlet.FilterChain;
> import javax.servlet.FilterConfig;
> import javax.servlet.ServletException;
> import javax.servlet.ServletRequest;
> import javax.servlet.ServletResponse;
> import javax.servlet.http.HttpServletRequest;
> import javax.servlet.http.HttpServletResponse;
> import javax.servlet.http.HttpSession;
>
> import net.codezilla.trinity.service.LoginBean;
>
>
> /**
> *
> * @author Jonathan Buckland
> * JSC Forums
> * http://swforum.sun.com/jive/thread.jspa?messageID=185654
> */
> public class UserSecurityCheckFilter implements Filter {
>
> private FilterConfig config = null;
> private final static String FILTER_APPLIED =
> "_security_filter_applied";
> public UserSecurityCheckFilter() { //called once. no method
> arguments allowed here!
> }
>
> public void init(FilterConfig conf) throws ServletException {
>
> }
>
> public void destroy() {
> }
>
> /** Creates a new instance of SecurityCheckFilter */
> public void doFilter(ServletRequest request, ServletResponse
> response, FilterChain chain)
> throws IOException, ServletException {
>
> HttpServletRequest hreq = (HttpServletRequest)request;
> HttpServletResponse hres = (HttpServletResponse)response;
> HttpSession session = hreq.getSession();
>
> String checkforloginpage = hreq.getPathTranslated();
>
> //System.out.println("ctext path " + hreq.getContextPath());
> //System.out.println("uri " + hreq.getRequestURI());
> //System.out.println("url " + hreq.getRequestURL());
> //System.out.println("srv path " + hreq.getServletPath());
> //dont filter login.jsp because otherwise an endless loop.
> //& only filter .jsp otherwise it will filter all images etc as
> well.
> if ((request.getAttribute(FILTER_APPLIED) ==
> null)) //&&(checkforloginpage.endsWith(".jsp")))
> {
> request.setAttribute(FILTER_APPLIED, Boolean.TRUE);
>
> // if all else fails, goto main page
> String loginPage="/MateoWeb/MainPage.faces";
> boolean loginStatus=false;
> //If the session bean is not null get the login status
> LoginBean lbean =
> (LoginBean)session.getAttribute("loginbean");
>
> // if you can find session, check logins
> if(lbean!=null) {
> //System.out.println("Checking user login");
> loginStatus=(lbean.isUserLoginStatus());
> }
> // System.out.println("Login status " + loginStatus);
> // if loginStatus is false for any of these filtered pages,
> goto relevant loginform
> if(!loginStatus) {
> // System.out.println("Redirecting to main page " +
> loginPage);
> hres.sendRedirect(loginPage);
> return;
> }
> }
> //deliver request to next filter
> chain.doFilter(request, response);
> }
> }
>
> On Wed, 2005-05-11 at 09:30 +0200, hermod.opstvedt@dnbnor.no wrote:
>> Hi
>>
>> Sorry for not answering this before - Been out sailing for some days.
>>
>> SecurityFilter is SF project. I have been using it in a couple of Struts
>> applications, and have now incorporated it into the MyFaces version of
>> one of them that I am currently migrating.
>>
>> Hermod
>
>
>
>
>
>
--
View this message in context: http://www.nabble.com/RE%3A-Servlet-Filter--t8978.html#a3799147
Sent from the MyFaces - Users forum at Nabble.com.
Re: Servlet Filter? I'm stuck
Posted by Alexandre Poitras <al...@gmail.com>.
/* filter every resources including css and images.
By the way, /*.jsf couldn't not work since your were redirecting to a
login.jsf page. This is why the infinite loop was always happening.
Your login page shouldn't be a jsf page in this case.
On 4/7/06, 101questionjsf <in...@yahoo.com> wrote:
>
> hi,
>
> Thanks for your help.
>
> I have tried, but weird thing is that the css file and images files cannot
> be seen on the login page...
>
> The filter take out these css and images?
>
>
> --
> View this message in context: http://www.nabble.com/RE%3A-Servlet-Filter--t8978.html#a3800292
> Sent from the MyFaces - Users forum at Nabble.com.
>
>
--
Alexandre Poitras
Québec, Canada
RE: Servlet Filter? I'm stuck
Posted by 101questionjsf <in...@yahoo.com>.
hi,
Thanks for your help.
I have tried, but weird thing is that the css file and images files cannot
be seen on the login page...
The filter take out these css and images?
--
View this message in context: http://www.nabble.com/RE%3A-Servlet-Filter--t8978.html#a3800292
Sent from the MyFaces - Users forum at Nabble.com.
RE: Servlet Filter? I'm stuck
Posted by Quintin Kerby <qk...@caci.com>.
Here's mine:
<context-param>
<description>Pages that are exempt from the authFilter.</description>
<param-name>mil.dla.daps.web.FILTER_EXEMPTIONS</param-name>
<param-value>/logon.jsf,/registration.jsf,/passwordRecovery.jsf,/userIdRecovery.jsf</param-value>
</context-param>
<filter>
<description>Filters all incoming requests for an existing session. If
requested file is not in the list FILTER_EXEMPTIONS,
the request is forwarded to the logon.jsf</description>
<display-name>authFilter</display-name>
<filter-name>authFilter</filter-name>
<filter-class>#######AuthorizationFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>authFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
package #####;
import java.io.IOException;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
import ######.Visit;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
/**
* Filters every request to verify that the user is logged in. If the
user has not logged in and tries requests
* a page that is not exempt from the filter, the server redirects to the
login page.
* <br><br>Exempt pages are listed as a comma-delimted context parameter
in the web.xml under the key <b>FILTER_EXEMPTIONS</b>.
* @author qkerby
*
*/
public class AuthorizationFilter implements Filter {
protected final Log log = LogFactory.getLog(this.getClass());
private FilterConfig config = null;
private ServletContext context = null;
private static Map exemptions = null;
private static int contextPathLength = 0;
/* (non-Javadoc)
* @see javax.servlet.Filter#init(javax.servlet.FilterConfig)
*/
public void init(FilterConfig filterConfig) throws
ServletException {
config = filterConfig;
context = config.getServletContext();
StringTokenizer tok = new
StringTokenizer(context.getInitParameter("FILTER_EXEMPTIONS"),",");
exemptions = new HashMap();
while(tok.hasMoreTokens()){
String exempt = (String) tok.nextElement();
if(log.isInfoEnabled()){
log.info("Exempt from authFilter:
"+exempt);
}
exemptions.put(exempt,null);
}
}
/* (non-Javadoc)
* @see
javax.servlet.Filter#doFilter(javax.servlet.ServletRequest,
javax.servlet.ServletResponse, javax.servlet.FilterChain)
*/
public void doFilter(ServletRequest req, ServletResponse res,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest)req;
HttpServletResponse response = (HttpServletResponse)res;
HttpSession session = request.getSession();
Visit visit =
(Visit)session.getAttribute(Constants.VISIT_KEY);
if(log.isDebugEnabled()){
log.debug(request.getRequestURI());
}
if(contextPathLength == 0){
contextPathLength =
request.getContextPath().length();
}
if(!exemptions.containsKey(request.getRequestURI().substring(contextPathLength))
&& visit == null){
response.sendRedirect(request.getContextPath()+Constants.LOGIN_VIEW);
}
else{
chain.doFilter(req, res);
}
}
/* (non-Javadoc)
* @see javax.servlet.Filter#destroy()
*/
public void destroy() {
exemptions.clear();
}
}
Quintin Kerby
CACI, Inc.
101questionjsf <in...@yahoo.com>
04/07/2006 03:46
Please respond to
"MyFaces Discussion" <us...@myfaces.apache.org>
To
users@myfaces.apache.org
cc
Subject
RE: Servlet Filter? I'm stuck
hi,
I changed the filter pattern in web.xml from /user/* to /*.jsf, then it
goes
into infinite loop, keep calling login.jsf.
I tried checking the uri with endWith login.jsf and login.jsp, then stop
looping, but images and css files cannot come thru.
Anyone has a filter to spare?
<filter-mapping>
<filter-name>UserSecurity</filter-name>
<url-pattern>/*.jsf</url-pattern>
</filter-mapping>
Anyone can help?
Patrick Haggood wrote:
>
> Here's a security filter I adapted from a sample on the Java Studio
> Creator forum:
>
> First the web.xml part:
> <filter>
> <filter-name>UserSecurity</filter-name>
> <filter-class>tolls.tools.UserSecurityCheckFilter</filter-class>
> </filter>
>
>
>
> <filter-mapping>
> <filter-name>UserSecurity</filter-name>
> <url-pattern>/user/*</url-pattern>
> </filter-mapping>
>
> Now the filter:
>
> /*
> * UserSecurityCheckFilter.java
> *
> * Created on 30 December 2004, 23:36
> */
>
> package tolls.tools;
>
> import java.io.IOException;
>
> import javax.servlet.Filter;
> import javax.servlet.FilterChain;
> import javax.servlet.FilterConfig;
> import javax.servlet.ServletException;
> import javax.servlet.ServletRequest;
> import javax.servlet.ServletResponse;
> import javax.servlet.http.HttpServletRequest;
> import javax.servlet.http.HttpServletResponse;
> import javax.servlet.http.HttpSession;
>
> import net.codezilla.trinity.service.LoginBean;
>
>
> /**
> *
> * @author Jonathan Buckland
> * JSC Forums
> * http://swforum.sun.com/jive/thread.jspa?messageID=185654
> */
> public class UserSecurityCheckFilter implements Filter {
>
> private FilterConfig config = null;
> private final static String FILTER_APPLIED =
> "_security_filter_applied";
> public UserSecurityCheckFilter() { //called once. no method
> arguments allowed here!
> }
>
> public void init(FilterConfig conf) throws ServletException {
>
> }
>
> public void destroy() {
> }
>
> /** Creates a new instance of SecurityCheckFilter */
> public void doFilter(ServletRequest request, ServletResponse
> response, FilterChain chain)
> throws IOException, ServletException {
>
> HttpServletRequest hreq = (HttpServletRequest)request;
> HttpServletResponse hres = (HttpServletResponse)response;
> HttpSession session = hreq.getSession();
>
> String checkforloginpage = hreq.getPathTranslated();
>
> //System.out.println("ctext path " + hreq.getContextPath());
> //System.out.println("uri " + hreq.getRequestURI());
> //System.out.println("url " + hreq.getRequestURL());
> //System.out.println("srv path " + hreq.getServletPath());
> //dont filter login.jsp because otherwise an endless loop.
> //& only filter .jsp otherwise it will filter all images etc as
> well.
> if ((request.getAttribute(FILTER_APPLIED) ==
> null)) //&&(checkforloginpage.endsWith(".jsp")))
> {
> request.setAttribute(FILTER_APPLIED, Boolean.TRUE);
>
> // if all else fails, goto main page
> String loginPage="/MateoWeb/MainPage.faces";
> boolean loginStatus=false;
> //If the session bean is not null get the login status
> LoginBean lbean =
> (LoginBean)session.getAttribute("loginbean");
>
> // if you can find session, check logins
> if(lbean!=null) {
> //System.out.println("Checking user login");
> loginStatus=(lbean.isUserLoginStatus());
> }
> // System.out.println("Login status " + loginStatus);
> // if loginStatus is false for any of these filtered pages,
> goto relevant loginform
> if(!loginStatus) {
> // System.out.println("Redirecting to main page " +
> loginPage);
> hres.sendRedirect(loginPage);
> return;
> }
> }
> //deliver request to next filter
> chain.doFilter(request, response);
> }
> }
>
> On Wed, 2005-05-11 at 09:30 +0200, hermod.opstvedt@dnbnor.no wrote:
>> Hi
>>
>> Sorry for not answering this before - Been out sailing for some days.
>>
>> SecurityFilter is SF project. I have been using it in a couple of
Struts
>> applications, and have now incorporated it into the MyFaces version of
>> one of them that I am currently migrating.
>>
>> Hermod
>
>
>
>
>
>
--
View this message in context:
http://www.nabble.com/RE%3A-Servlet-Filter--t8978.html#a3799147
Sent from the MyFaces - Users forum at Nabble.com.