问题是类似的:Spring Security 3.1重定向到登录不起作用
我将Spring3.1与Spring Mvc和Spring Security一起使用。
这里是app-security-config。
<security:http auto-config="true" use-expressions="true">
<security:form-login login-page="/login.jsp"
login-processing-url="/j_spring_security_check"
default-target-url="/pages/index.jsp"
always-use-default-target="true"
authentication-failure-url="/login.jsp?login_error=1"/>
<security:access-denied-handler ref="accessDeniedHandler"/>
<!-- Session Invalida-->
<security:logout invalidate-session="true" logout-success-url="/login.jsp" delete-cookies="JSESSIONID" />
<!-- Interceptadores -->
<!-- security:intercept-url pattern="/expire.jsp*" filters="none"/-->
<!-- security:intercept-url pattern="/login.jsp*" access="ROLE_ANONYMOUS" requires-channel="https"/-->
<security:intercept-url pattern="/expire.jsp" access="permitAll" />
<security:intercept-url pattern="/AccessDenied.jsp*" access="permitAll" />
<security:intercept-url pattern="/scripts/*" access="permitAll" />
<security:intercept-url pattern="/styles/*" access="permitAll" />
<security:intercept-url pattern="/images/*" access="permitAll" />
<security:intercept-url pattern="/login.jsp" access="permitAll" requires-channel="https"/>
<security:intercept-url pattern="/pages/**" access="hasAnyRole(${role.autenticated})" requires-channel="https"/>
<security:http-basic/>
<!-- Establece maximas sesiones para un usuarios -->
<security:session-management session-fixation-protection="none" >
<security:concurrency-control max-sessions="1" error-if-maximum-exceeded="true" />
</security:session-management>
<!-- Establece maximas sesiones para un usuarios -->
<!-- security:session-management invalid-session-url="/expire.jsp" session-fixation-protection="none" >
<security:concurrency-control max-sessions="1" error-if-maximum-exceeded="true" expired-url="/expire.jsp"/>
</security:session-management-->
<!-- security:session-management invalid-session-url="/login.jsp?login_error=2" session-authentication-error-url="/login.jsp?login_error=3" session-fixation-protection="none" >
<security:concurrency-control max-sessions="1" error-if-maximum-exceeded="true" expired-url="/login.jsp?login_error=4"/>
</security:session-management-->
<security:port-mappings>
<security:port-mapping http='8080' https="8443"/>
</security:port-mappings>
</security:http>
<beans:bean id="accessDeniedHandler" class="ar.com.firstdata.upploader.web.mvc.controller.AccessDeniedController">
<beans:property name="accessDeniedUrl" value="/AccessDenied.jsp"> </beans:property>
</beans:bean>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:META-INF/spring/*-config.xml</param-value>
</context-param>
<jsp-config>
<taglib>
<taglib-uri>sitemesh-page</taglib-uri>
<taglib-location>/tld/sitemesh-page.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>sitemesh-decorator</taglib-uri>
<taglib-location>/tld/sitemesh-decorator.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>/spring</taglib-uri>
<taglib-location>/META-INF/spring.tld</taglib-location>
</taglib>
</jsp-config>
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<!-- SiteMesh -->
<filter>
<filter-name>sitemesh</filter-name>
<filter-class>com.opensymphony.sitemesh.webapp.SiteMeshFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>sitemesh</filter-name>
<url-pattern>*.html</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>sitemesh</filter-name>
<url-pattern>*.htm</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>sitemesh</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
<listener>
<listener-class>
org.springframework.security.web.session.HttpSessionEventPublisher
</listener-class>
</listener>
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<session-config>
<session-timeout>1</session-timeout>
</session-config>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>*.app</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>login.jsp</welcome-file>
</welcome-file-list>
<bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop key="/pages/findConfData.app">configurationController</prop>
<prop key="/pages/readLoadXML.app">configurationController</prop>
<prop key="/pages/addElementToList.app">configurationController</prop>
<prop key="/pages/eraseElementToList.app">configurationController</prop>
<prop key="/pages/persistXMLfiletransfer.app">configurationController</prop>
<prop key="/pages/findLoggedUser.app">configurationController</prop>
</props>
</property>
</bean>
<session-config>
<session-timeout>1</session-timeout>
</session-config>
<prop key="/pages/eraseElementToList.app">configurationController</prop>
@RequestMapping(method = RequestMethod.POST)
public final ModelAndView eraseElementToList(HttpServletRequest request,
HttpServletResponse response) throws Exception {
我在日志中得到一个ActionDenied异常,就这样...没有将我重定向到登录页面。
这里最有可能的解释是,您有一个SpringExceptionHandler
,它会捕获AccessDeniedException
并阻止Spring Security性对其起作用。如果您在某个地方使用安全注释,这是一个相当常见的问题(尽管您在问题中没有提到这一点)。
另外,从stacktrace中应该可以清楚地看到,它提到了Spring Security没有处理它的异常(始终发布stacktrace)。另外,请更仔细地重新检查日志,以区分这两种情况。如果您看到“重定向到身份验证入口点”,那么这意味着Spring Security正在接收异常,您应该看到登录页面。如果使用异常处理程序,您将不会看到这一点。
如果这是问题所在,您可以使@exceptionhandler
注释更加具体,这样它们就不会捕获此异常,或者您可以创建一个特定的@exceptionhandler(AccessDeniedException.class)
注释并简单地在其中重新抛出异常。
问题内容: 我一直在寻找有关该主题的许多文章,但找不到适合我的解决方案。 我正在将Java EE 6与JSF 2.0结合使用(在JBoss AS 7.1上部署) 在我的我有: 并且我 希望在会话自动超时时将用户重定向到登录页面。 我尝试过的 方法1:使用过滤器 我尝试了以下过滤器: 在我尝试过的 和 过滤器在每次请求时都会被调用(在控制台中记录“被调用的适配器”)。 但是,会话超时时不会调用它。
默认情况下,它类似于NestJS或node。js express调用具有超时的控制器。 结果是控制器每2分钟被一次又一次地调用,如何禁用该功能? 所需的结果应该是超时的。 我看到了延长超时长度的建议,我希望保留超时,但响应异常。
我目前正在为Minecraft Fabric编程一个插件/服务器端模块,它可以改变玩家的死亡。更准确地说:当玩家死亡时,他们应该在某些情况下保留他们的库存。 为了实现这一点,我有一个扩展net的类。我的世界。实体游戏者PlayerEntity和“混入”课堂。我的世界。服务器网络服务器播放属性。现在,如果我调用此方法,我将onDeath(DamageSource source)中的方法调用重定向到我
嗨,我正在使用这段代码为我的CQ5示例应用程序创建一个Post方法。 它可以处理GET请求。但是对于POST(doPost)请求,我重新引用了一条消息:。我应该做些什么来解决这个问题?
我有一个项目,我已经将Vaadin与Spring Boot集成在一起。我使用的依赖项之一是spring-boot-starter-security。 当我调用url http://localhost:8080/appxyz/时,它会将我重定向到http://localhost:8080/appxyz/login。我希望它会带着@springui(“/login”)注释转到我的LoginUI类中。它
我是一个使用ASP.NET MVC5的新手。我需要对控制器进行Jquery调用,以返回一个传递单个参数的新视图。我可以看到很多类似MVC3和之前版本的例子,但却很难找到任何处理MVC4或MVC5并起作用的例子。我所要做的就是从输入元素获取一个值,将其传递给控制器ActionResult,然后打开一个新视图。 PageTwo是视图,Home是控制器。 我试过的代码(包括许多其他代码)通常在404: