dear christoph, hope that this is not private now , i was sure, that i sent
the last one also to the list... anyway ... 

again thanks for you help ... 
i copied now all the gode as desired and hope that this will help ;) 





>ou won't really be able to tell if the user is "coming" from the login
>page. The best you can do is to detect that the session is not in a
>proper state - by checking for some key in the session. I'm just trying
>to be clear.

no i dont case all i want is to relogin without after crash if a timeout
happens...


>You have to do your checking in a Filter so that it occurs /before/ the
>servlet handles the request. Otherwise, you'd have to re-write a LOT of
>your application to check for proper session state before doing whatever
>it is your servlet needs to do.

yes that sounds logical to me ....but were is the right point ...;) 



>Exactly where?




Im writing this in a Sigelton bean wich is initialized via spring with the
postconstruct 
paramenter. it seems that this is to late, what do you suggest ? maybe a
special filter would be a better place?


like the following : 

@PostConstruct
        public void SNUserSingletonInit() {

session.setAttribute("ISVALID",test);

}



to give you an idea , where in the activity chain we are I send you the
callstack wich is shown if I set a breakboint the the codeline wich setts
the session-key:


SNUserSessionUtil.SNUserSingletonInit() line: 53        
NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not
available [native method]       
NativeMethodAccessorImpl.invoke(Object, Object[]) line: 39      
DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 25  
Method.invoke(Object, Object...) line: 597      
InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(Object) line:
297     
InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(Object,
String) line: 250       
CommonAnnotationBeanPostProcessor(InitDestroyAnnotationBeanPostProcessor).postProcessBeforeInitialization(Object,
String) line: 144       
DefaultListableBeanFactory(AbstractAutowireCapableBeanFactory).applyBeanPostProcessorsBeforeInitialization(Object,
String) line: 350       
DefaultListableBeanFactory(AbstractAutowireCapableBeanFactory).initializeBean(String,
Object, RootBeanDefinition) line: 1329  
DefaultListableBeanFactory(AbstractAutowireCapableBeanFactory).doCreateBean(String,
RootBeanDefinition, Object[]) line: 471 
AbstractAutowireCapableBeanFactory$1.run() line: 409    
AccessController.doPrivileged(PrivilegedAction<T>, AccessControlContext)
line: not available [native method]     
DefaultListableBeanFactory(AbstractAutowireCapableBeanFactory).createBean(String,
RootBeanDefinition, Object[]) line: 380 
AbstractBeanFactory$2.getObject() line: 302     
SessionScope(AbstractRequestAttributesScope).get(String, ObjectFactory)
line: 43        
SessionScope.get(String, ObjectFactory) line: 90        
DefaultListableBeanFactory(AbstractBeanFactory).doGetBean(String, Class,
Object[], boolean) line: 298    
DefaultListableBeanFactory(AbstractBeanFactory).getBean(String, Class,
Object[]) line: 185     
DefaultListableBeanFactory(AbstractBeanFactory).getBean(String) line: 164       
DefaultListableBeanFactory.findAutowireCandidates(String, Class,
DependencyDescriptor) line: 671 
DefaultListableBeanFactory.resolveDependency(DependencyDescriptor, String,
Set, TypeConverter) line: 610   
AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(Object,
String, PropertyValues) line: 412       
InjectionMetadata.injectFields(Object, String) line: 105        
AutowiredAnnotationBeanPostProcessor.postProcessAfterInstantiation(Object,
String) line: 240
and so on...





>It's possible that the framework is interfering, but unlikely. Can you
>send the code for your SessionTimeoutFilter as well as the configuration
>from web.xml for /all/ of your filters? Remember to remove any sensitive
>information.

Ok here comes the the code please have a look at the incode comments...

public class SessionTimeoutFilter implements Filter {

        private final Log logger = 
LogFactory.getLog(SessionTimeoutFilter.class);

        private String timeoutPage = "timeout.html";

        public void init(FilterConfig filterConfig) throws ServletException {
        }

        public void doFilter(ServletRequest request, ServletResponse response,
                        FilterChain filterChain) throws IOException, 
ServletException {

                if ((request instanceof HttpServletRequest)
                                && (response instanceof HttpServletResponse)) {
                        HttpServletRequest httpServletRequest = 
(HttpServletRequest) request;
                        HttpServletResponse httpServletResponse = 
(HttpServletResponse) response;
                        
                        
                        // is session expired control required for this request?
                        if 
(isSessionControlRequiredForThisResource(httpServletRequest)) {
                                String requestedID = 
httpServletRequest.getRequestedSessionId();
                                
                                // is session invalid?
                                HttpSession session = 
httpServletRequest.getSession();
                                String sID = session.getId();
                                String nochmalID = 
httpServletRequest.getQueryString();
                                
                                // ok this is allways false , means the session 
is allways valid. sure
it is, but its a new one ! 
                                boolean isSessionInValid = (requestedID != 
null)&&
!httpServletRequest.isRequestedSessionIdValid();
                                Object testObject = 
session.getAttribute("ISVALID");
                                
                                // here I tried some things... the 
isSessionInValid flag doesnt help b/c
the session is allways valid
                                // the testObject is allways null b/c if the 
user comes from the
loginpage the user is not set in the first time
                                // with the code like this, we're allways 
redirected in an constant
loop.
                                // besides that I think redirection is not the 
right way to handle , I
mean, 
                                // i feel the right solution would recognize 
that the session is not in
a proper state and than 
                                // delete the request wich allways causes in 
that crash. but how? and
wich restored information exactly is the wrong one ?
                                if (testObject == null /*&& isSessionInValid*/ 
) {
                                        String timeoutUrl = 
httpServletRequest.getContextPath()
                                                        + "/" + 
getTimeoutPage();
                                        logger
                                                        .info("session is 
invalid! redirecting to timeoutpage : "
                                                                        + 
timeoutUrl);

                                        
httpServletResponse.sendRedirect(timeoutUrl);
                                        return;
                                }
                        }
                }
                
                filterChain.doFilter(request, response);
                System.out.println("test Request");
        }

        /**
         * 
         * session shouldn't be checked for some pages. For example: for timeout
         * page.. Since we're redirecting to timeout page from this filter, if 
we
         * don't disable session control for it, filter will again redirect to 
it
         * and this will be result with an infinite loop...
         */
        private boolean isSessionControlRequiredForThisResource(
                        HttpServletRequest httpServletRequest) {
                String requestPath = httpServletRequest.getRequestURI();

                boolean controlRequired =
!StringUtils.contains(requestPath,getTimeoutPage());

                return controlRequired;
        }

        
        
        public void destroy() {
        }

        public String getTimeoutPage() {
                return timeoutPage;
        }

        public void setTimeoutPage(String timeoutPage) {
                this.timeoutPage = timeoutPage;
        }



the web xml : 



<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.5"
 xmlns="http://java.sun.com/xml/ns/javaee";
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd";>
 <!-- Use for facelets  -->
 <context-param>
  <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
  <param-value>.xhtml</param-value>
 </context-param>
 <!-- Special Debug Output for Development -->
 <context-param>
  <param-name>facelets.DEVELOPMENT</param-name>
  <param-value>false</param-value>
 </context-param>
 <!-- -->
 <context-param>
  <param-name>facelets.SKIP_COMMENTS</param-name>
  <param-value>true</param-value>
 </context-param>
 <!-- context-param>
        <param-name>facelets.BUFFER_SIZE</param-name>
        <param-value>10000</param-value>
 </context-param -->
 <context-param>
  <param-name>facelets.REFRESH_PERIOD</param-name>
  <param-value>0</param-value>
 </context-param>
 <context-param>
  <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
  <param-value>server</param-value>
 </context-param>
 <context-param>
  <param-name>javax.faces.CONFIG_FILES</param-name>
  <param-value>/WEB-INF/faces-config.xml</param-value>
 </context-param>
 <context-param>
  <param-name>com.sun.faces.verifyObjects</param-name>
  <param-value>false</param-value>
 </context-param>
 <context-param>
 
<param-name>javax.faces.PARTIAL_STATE_SAVING_DISPATCH_EVERY_TIME</param-name>
  <param-value>false</param-value>
 </context-param>
 <context-param>
  <param-name>facelets.LIBRARIES</param-name>
  <param-value>/WEB-INF/myproject.taglib.xml;</param-value>
 </context-param>
 <!-- Vladi  -->
 <context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>/WEB-INF/applicationContext.xml</param-value>
 </context-param>
 <!--  filter>
  <filter-name>HibernateFilter</filter-name>
  <filter-class>de.we.myproject.hibernate.HibernateFilter</filter-class>
 </filter 
 Filter zur Überprufung des Logins 
  filter>
  <filter-name>myproject-Auth-Filter</filter-name>
  <filter-class>de.we.myproject.Util.AuthFilter</filter-class>
 </filter>
 <filter-mapping>
  <filter-name>myproject-Auth-Filter</filter-name>
  <url-pattern>/pages/*</url-pattern>
 </filter-mapping 
  filter-mapping>
  <filter-name>HibernateFilter</filter-name>
  <url-pattern>*.jsf</url-pattern>
 </filter-mapping 
 Using bei Richfaces  -->
 <context-param>
  <param-name>org.richfaces.SKIN</param-name>
  <param-value>myproject</param-value>
 </context-param>
 <!--Richfaces has a few parsers onboard. The default one is based on Tidy,
but it is quite slow. 
 The Neko parser is faster and can be used by setting the following
context-param’
 Fast Filter which is based on nekko parser requires nekkohtml.jar and
xersesimpl.jar in your classpath. As this filter wasn't default for A4j and
later RF - 
 these jars arent included to distribution. Download it and put in your
classpath.-->
 <context-param>
  <param-name>org.ajax4jsf.xmlparser.ORDER</param-name>
  <param-value>TIDY,NEKO</param-value>
 </context-param>
 <!--  param-value>NEKO</param-value -->
 <context-param>
  <param-name>org.ajax4jsf.xmlparser.TIDY</param-name>
  <param-value>/pages/announcement/notif_1.xhtml, 
                /pages/announcement/notif_1_search.xhtml,
                /pages/announcement/mynotif.xhtml, 
                /pages/gatgets/show_gatgets.xhtml, 
                /pages/gatgets/my_gatgets.xhtml,
                /pages/profile/profile_results.xhtml,
                /pages/profile/profile_results_2.xhtml,
                /pages/profile/show_profile_friends.xhtml,
                /pages/profile/show_profile_trophies.xhtml,
                /pages/profile/show_profile_groups.xhtml,
                /pages/profile/show_profile_photoAlbums.xhtml,
                /pages/myNetwork/addressbook_1.xhtml,
                /pages/myNetwork/1_search.xhtml,
                /pages/myNetwork/addressbook_2.xhtml,
                /pages/myNetwork/addressbook_3.xhtml,
                /pages/groups/searchgroup.xhtml,
                /pages/groups/mygroupmessage.xhtml,
                /pages/groups/mygroup.xhtml,
                /pages/groups/updateGroup1.xhtml,
                /pages/fotoAlbum/myPhotoAlbum.xhtml,
                /pages/fotoAlbum/photoAlbums.xhtml,
                /pages/messages/posteingang.xhtml,
                /pages/messages/postausgang.xhtml,
                /pages/appointment/appointment.xhtml,
                /pages/appointment/myAppointment.xhtml</param-value>
 </context-param>
 <context-param>
  <param-name>org.ajax4jsf.xmlparser.NEKO</param-name>
  <param-value>.*\..*</param-value>
 </context-param>
 <!--  The following declaration allows to load only one integrated style
sheet file.
           The integrated style sheet contains style for all shipped 
components. 
           The skinnability feature still works.
           The "DEFAULT" value is a classical on-demand variant.
           The "NONE" stops loading the styles at all.
           The earlier introduced plain skin resets all color and font 
parameters
to null. 
           The "NONE" value for org.richfaces.LoadStyleStrategy means that
predefined 
           styles for RichFaces are not used.  -->
 <context-param>
  <param-name>org.richfaces.LoadScriptStrategy</param-name>
  <param-value>none</param-value>
 </context-param>
 <!-- Orchastra Optional 
 filter>
    <filter-name>frameworkAdapterFilter</filter-name>
   
<filter-class>org.apache.myfaces.orchestra.frameworkAdapter.basic.BasicFrameworkAdapterFilter</filter-class>
  </filter>

  <filter>
    <filter-name>requestParameterFilter</filter-name>
   
<filter-class>org.apache.myfaces.orchestra.requestParameterProvider.RequestParameterServletFilter</filter-class>
  </filter>

  <filter-mapping>
    <filter-name>frameworkAdapterFilter</filter-name>
    <url-pattern>*.jsf</url-pattern>
  </filter-mapping>

  <filter-mapping>
    <filter-name>requestParameterFilter</filter-name>
    <url-pattern>*.jsf</url-pattern>
  </filter-mapping -->
 <context-param>
  <param-name>org.ajax4jsf.VIEW_HANDLERS</param-name>
  <param-value>com.sun.facelets.FaceletViewHandler</param-value>
 </context-param>
 <filter>
  <display-name>RichFaces Filter</display-name>
  <filter-name>richfaces</filter-name>
  <filter-class>org.ajax4jsf.Filter</filter-class>
  <init-param>
   <param-name>forceparser</param-name>
   <param-value>false</param-value>
  </init-param>
  <init-param>
   <param-name>enable-cache</param-name>
   <param-value>true</param-value>
  </init-param>
  <init-param>
   <param-name>maxRequestSize</param-name>
   <param-value>1250000</param-value>
  </init-param>
  <init-param>
   <param-name>createTempFiles</param-name>
   <param-value>false</param-value>
  </init-param>
 </filter>
 <!-- filter-mapping>
  <filter-name>SessionTimeoutFilter</filter-name>
  <url-pattern>*.jsf</url-pattern>
 </filter-mapping-->
 <filter>
  <filter-name>springRequestContextFilter</filter-name>
 
<filter-class>org.springframework.web.filter.RequestContextFilter</filter-class>
 </filter>
 <filter>
  <filter-name>SessionTimeoutFilter</filter-name>
  <filter-class>de.we.myproject.util.SessionTimeoutFilter</filter-class>
 </filter>
 <filter-mapping>
  <filter-name>richfaces</filter-name>
  <servlet-name>Faces Servlet</servlet-name>
  <dispatcher>REQUEST</dispatcher>
  <dispatcher>FORWARD</dispatcher>
  <dispatcher>INCLUDE</dispatcher>
 </filter-mapping>
 <filter-mapping>
  <filter-name>springRequestContextFilter</filter-name>
  <url-pattern>/*</url-pattern>
  <dispatcher>FORWARD</dispatcher>
  <dispatcher>REQUEST</dispatcher>
 </filter-mapping>
 <filter-mapping>
  <filter-name>SessionTimeoutFilter</filter-name>
  <url-pattern>*.jsf</url-pattern>
 </filter-mapping>
 <listener>
  <listener-class>com.sun.faces.config.ConfigureListener</listener-class>
 </listener>
 <!-- Using bei Spring -->
 <listener>
 
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
 </listener>
 <!-- Orchestra -->
 <listener>
 
<listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
 </listener>
 <listener>
 
<listener-class>org.apache.myfaces.orchestra.conversation.servlet.ConversationManagerSessionListener</listener-class>
 </listener>
 <!--Anfang  Session Time Out -->
 <listener>
  <listener-class>de.we.myproject.util.MySessionListener</listener-class>
 </listener>
 <!-- Faces Servlet -->
 <servlet>
  <servlet-name>Faces Servlet</servlet-name>
  <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
  <load-on-startup>1</load-on-startup>
 </servlet>
 <!-- Faces Servlet 
  servlet>
<servlet-name>SourceCodeServlet</servlet-name>
<servlet-class>
        org.apache.myfaces.shared_tomahawk.util.servlet.SourceCodeServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet 
 servlet mapping 
  servlet-mapping>
<servlet-name>SourceCodeServlet</servlet-name>
<url-pattern>*.jsf</url-pattern>
</servlet-mapping -->
 <servlet>
  <servlet-name>ConfirmServlet</servlet-name>
  <servlet-class>de.we.myproject.util.UserConfirm</servlet-class>
 </servlet>
 <servlet-mapping>
  <servlet-name>ConfirmServlet</servlet-name>
  <url-pattern>/confirm/*</url-pattern>
 </servlet-mapping>
 <!-- Faces Servlet Mapping -->
 <servlet-mapping>
  <servlet-name>Faces Servlet</servlet-name>
  <url-pattern>*.jsf</url-pattern>
 </servlet-mapping>
 <session-config>
  <session-timeout>1</session-timeout>
 </session-config>
 <!--End  Session Time Out -->
 <welcome-file-list>
  <welcome-file>/index.html</welcome-file>
  <!--  welcome-file>/index.xhtml</welcome-file -->
 </welcome-file-list>
 <error-page>
 
<exception-type>javax.faces.application.ViewExpiredException</exception-type>
  <location>/login_error.html</location>
 </error-page>

 <!-- orchestraFilter -->
 <filter>  
   <filter-name>orchestraFilter</filter-name>
  
<filter-class>org.apache.myfaces.orchestra.conversation.jsf.filter.OrchestraServletFilter
   </filter-class>       
    <init-param>              
     <param-name>serializeRequests</param-name>            
     <param-value>true</param-value>        
     </init-param>  
     </filter>
     
  <filter-mapping>
        <filter-name>orchestraFilter</filter-name>
        <url-pattern>*.jsf</url-pattern>
        <dispatcher>FORWARD</dispatcher>
        <dispatcher>REQUEST</dispatcher>
    </filter-mapping>
 
 <!-- test  -->
 <security-constraint>
  <web-resource-collection>
   <web-resource-name>Geschuetzter Bereich</web-resource-name>
   <url-pattern>/pages/*</url-pattern>
  </web-resource-collection>
  <auth-constraint>
   <role-name>kunde</role-name>
   <role-name>premiumkunde</role-name>
   <role-name>superuser</role-name>
   <role-name>user</role-name>
   <role-name>premiumuser</role-name>
   <role-name>admin</role-name>
  </auth-constraint>
 </security-constraint>
 <login-config>
  <auth-method>FORM</auth-method>
  <form-login-config>
   <form-login-page>/login.jsf</form-login-page>
   <form-error-page>/login_error.jsf</form-error-page>
  </form-login-config>
 </login-config>
 <security-role>
  <role-name>kunde</role-name>
 </security-role>
 <security-role>
  <role-name>premiumkunde</role-name>
 </security-role>
 <security-role>
  <role-name>superuser</role-name>
 </security-role>
 <security-role>
  <role-name>guest</role-name>
 </security-role>
 <security-role>
  <role-name>premiumGuest</role-name>
 </security-role>
 <security-role>
  <role-name>admin</role-name>
   <!--user-data-constraint>
            <transport-guarantee>CONFIDENTIAL</transport-guarantee>
        </user-data-constraint-->
 </security-role>
 


 
</web-app>
        



thank again for reading all the stuff chris , 


cheers

filip






-- 
View this message in context: 
http://www.nabble.com/Tomcat-Realm-Auto-Relogin-after-Session-Timeout-Problem-tp21938671p21956226.html
Sent from the Tomcat - User mailing list archive at Nabble.com.


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org

Reply via email to