S2SH整合Shiro权限框架出现这样的问题:

   SessionContext must be an HTTP compatible implementation.

   

   java.lang.IllegalArgumentException: SessionContext must be an HTTP compatible implementation.

   

   at org.apache.shiro.web.session.mgt.ServletContainerSessionManager.createSession(ServletContainerSessionManager.java:103)

   

   at org.apache.shiro.web.session.mgt.ServletContainerSessionManager.start(ServletContainerSessionManager.java:64)

   

   at org.apache.shiro.mgt.SessionsSecurityManager.start(SessionsSecurityManager.java:121)

   

   at org.apache.shiro.subject.support.DelegatingSubject.getSession(DelegatingSubject.java:336)

   

   at org.apache.shiro.subject.support.DelegatingSubject.getSession(DelegatingSubject.java:314)

   

   at org.apache.shiro.mgt.DefaultSubjectDAO.mergePrincipals(DefaultSubjectDAO.java:182)

   

   at org.apache.shiro.mgt.DefaultSubjectDAO.saveToSession(DefaultSubjectDAO.java:163)

   

   at org.apache.shiro.mgt.DefaultSubjectDAO.save(DefaultSubjectDAO.java:144)

   

   at org.apache.shiro.mgt.DefaultSecurityManager.save(DefaultSecurityManager.java:383)

   

   at org.apache.shiro.mgt.DefaultSecurityManager.createSubject(DefaultSecurityManager.java:350)

   

   at org.apache.shiro.mgt.DefaultSecurityManager.createSubject(DefaultSecurityManager.java:183)

   

   at org.apache.shiro.mgt.DefaultSecurityManager.login(DefaultSecurityManager.java:283)

   

   at org.apache.shiro.subject.support.DelegatingSubject.login(DelegatingSubject.java:257)

   

   at com.atlastiger.emr.system.web.UserAction.setLogin(UserAction.java:129)

   

   at com.atlastiger.emr.system.web.UserAction.login(UserAction.java:111)

   

   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

   

   at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

   

   at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

   21at java.lang.reflect.Method.invoke(Method.java:597)

   

   at com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:453)

   

   at com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:292)

   

   at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:255)

   

   at com.opensymphony.xwork2.interceptor.annotations.AnnotationWorkflowInterceptor.intercept(AnnotationWorkflowInterceptor.java:135)

   

   at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)

   

   at com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:176)

   

   at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)

   

   at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)

   

   at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:265)

   

   at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)

   

   at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)


   原因:在Web配置文件里面,我们用ShiroFilter过滤器的时候放的位置不对造成的。

   解决:把Shiro配置过滤器放在Spring监听器之后,则可以。