Dan,
You're running into the following code in Shiro:
    /**     * Utility method available to subclasses that wish to     * assign 
a generated session ID to the session instance directly.  This method is not 
used by the     * {@code AbstractSessionDAO} implementation directly, but it is 
provided so subclasses don't     * need to know the {@code Session} 
implementation if they don't need to.     * <p/>     * This default 
implementation casts the argument to a {@link SimpleSession}, Shiro's default 
EIS implementation.     *     * @param session   the session instance to which 
the sessionId will be applied     * @param sessionId the id to assign to the 
specified session instance.     */    protected void assignSessionId(Session 
session, Serializable sessionId) {        ((SimpleSession) 
session).setId(sessionId);    }
Since the session ID is immutable in the Session interface, Shiro has to cast 
to a specific implementation in order to set the session ID (I think that's a 
bit of a design flaw, but at the same time you don't want normal business code, 
which is written against the Session interface, to be able to change the 
ID). I'm not sure how many different places in the codebase make similar 
assumptions about the Session implementation, but I think you'll have to create 
subclasses and override such methods with your own implementations that know 
how to interact with your own Session implementation. Another option would be 
to have your implementation extend SimpleSession, if your goal is to add more 
details to your session without removing any.
That said, since you can assign arbitrary attributes to a session, I don't 
think people run into a need to replace the Session implementation very often. 
Is there some specific shortcoming you're trying to address? Providing a little 
additional information about your goals might help the Shiro developers know 
how to enhance Shiro in the future to make its default implementation more 
versatile.
Best regards,Bryan TurnerKatasoft, Inc
> Date: Thu, 22 Sep 2011 11:53:03 -0700
> From: [email protected]
> To: [email protected]
> Subject: Replacing SimpleSession
> 
> Hi --
> 
> In my shiro.ini file, I have
> 
> sessionDAO = org.apache.shiro.session.mgt.eis.EnterpriseCacheSessionDAO
> sessionManager = org.apache.shiro.web.session.mgt.DefaultWebSessionManager
> sessionFactory= com.security.MySimpleSessionFactory
> securityManager.sessionManager.sessionFactory = $sessionFactory
> securityManager.sessionManager.sessionDAO = $sessionDAO
> 
> to define my own "simple session" -- it basically for now just a copy of
> shiro's SimpleSessionFactory and SimpleSession classes under new names. 
> Later, I plan to override the reading and writing.
> 
> But when I run, it displays this stacetrace:
> 
> javax.servlet.ServletException: Filtered request failed.
> 
> org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:299)
> 
> org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:81)
> 
> root cause
> 
> java.lang.ClassCastException: com.security.MySimpleSession cannot be cast to
> org.apache.shiro.session.mgt.SimpleSession
> 
> org.apache.shiro.session.mgt.eis.AbstractSessionDAO.assignSessionId(AbstractSessionDAO.java:146)
> 
> org.apache.shiro.session.mgt.eis.EnterpriseCacheSessionDAO.doCreate(EnterpriseCacheSessionDAO.java:65)
> 
> org.apache.shiro.session.mgt.eis.AbstractSessionDAO.create(AbstractSessionDAO.java:116)
> 
> org.apache.shiro.session.mgt.eis.CachingSessionDAO.create(CachingSessionDAO.java:184)
> 
> org.apache.shiro.session.mgt.DefaultSessionManager.create(DefaultSessionManager.java:177)
> 
> org.apache.shiro.session.mgt.DefaultSessionManager.doCreateSession(DefaultSessionManager.java:158)
> 
> org.apache.shiro.session.mgt.AbstractValidatingSessionManager.createSession(AbstractValidatingSessionManager.java:136)
> 
> org.apache.shiro.session.mgt.AbstractNativeSessionManager.start(AbstractNativeSessionManager.java:56)
> 
> org.apache.shiro.mgt.SessionsSecurityManager.start(SessionsSecurityManager.java:121)
> 
> org.apache.shiro.subject.support.DelegatingSubject.getSession(DelegatingSubject.java:306)
> 
> org.apache.shiro.web.servlet.ShiroHttpServletRequest.getSession(ShiroHttpServletRequest.java:147)
> 
> org.apache.shiro.web.servlet.ShiroHttpServletRequest.getSession(ShiroHttpServletRequest.java:163)
>       com.server.FxFilter.doFilter(FxFilter.java:139)
> 
> org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:364)
> 
> I'm not sure if what I'm doing is legal -- should I be able to replace
> SimpleSession with my own implementation?
> 
> Thanks,
> Dan
> 
> --
> View this message in context: 
> http://shiro-user.582556.n2.nabble.com/Replacing-SimpleSession-tp6821516p6821516.html
> Sent from the Shiro User mailing list archive at Nabble.com.
                                          

Reply via email to