spring security 中,配置登录页面,登录页面的action一定要是j_spring_security_check吗?

问题描述

我自定义了一个登录页面,登录的action也是自己定义的,主要是去数据库验证用户名和密码是否正确。然后把当前用户存在session中。可发现Security 的http配置完后,拥有权限的用户并不能正确进入页面,都被拦截然后重定向到登录页面。因为初次使用security,有没高手给点意见,哪儿出了问题?截取配置片段:<http><form-login login-page="/demo/user/login" login-processing-url="/demo/user/doLogin" default-target-url="/demo/user/welcome.jsp" authentication-failure-url="/traffic/user/login"/> <intercept-url pattern="/login.jsp" filters="none"/> <intercept-url pattern="/index.jsp" filters="none"/> <intercept-url pattern="/demo/user/login" filters="none"/> <intercept-url pattern="/demo/user/doLogin" filters="none"/> <intercept-url pattern="/demo/user/welcome" filters="none"/> <intercept-url pattern="/demo/user/save" access="ROLE_1" /> <intercept-url pattern="/demo/user/new" access="ROLE_1" /> 问题补充:cwx714 写道

解决方案

登陆页面的form action也可以自定义的,http配置如下:<custom-filter ref="formLoginAuthenticationFilter" position="FORM_LOGIN_FILTER"/>bean配置: <bean id="formLoginAuthenticationFilter" class="org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter"> <property name="filterProcessesUrl" value="${loginProcessesUrl}"></property></bean>
解决方案二:
新手 标记下!
解决方案三:
引用谢谢cwx714的建议,我目前把登录的action换成"j_spring_security_check"可以登录,可以正常验证。可是我的原来Action中保存Session的那些语句写在哪儿呢?我想不至于用了Security框架,就不用Session了吧。保存Session的那些语句其实可以不用写的,HttpSessionContextIntegrationFilter在执行其他过滤器之前,率先判断用户的session中是否已经存在一个SecurityContext了。如果存在,就把 SecurityContext拿出来,放到SecurityContextHolder中,供Spring Security的其他部分使用。如果不存在,就创建一个SecurityContext出来,还是放到SecurityContextHolder中,供Spring Security的其他部分使用。在所有过滤器执行完毕后,清空SecurityContextHolder,因为SecurityContextHolder是基于ThreadLocal的,如果在操作完成后清空ThreadLocal,会受到服务器的线程池机制的影响。如果你需要在登录后要在session中保存一些用户的其他信息,可以使用AuthenticationProcessingFilter:public class MyAuthenticationProcessingFilter extendsAuthenticationProcessingFilter {@Overridepublic Authentication attemptAuthentication(HttpServletRequest request)throws AuthenticationException { //写你的业务处理 ......return super.attemptAuthentication(request);}然后配置:<bean id="authenticationProcessingFilter" class="com.zbxsoft.ibs.security.service.CaAuthenticationProcessingFilter"><s:custom-filter before="AUTHENTICATION_PROCESSING_FILTER"/> <property name="authenticationFailureUrl" value="/login.action?error=9" /><property name="defaultTargetUrl" value="/index.action" /><property name="authenticationManager" ref="authenticationManager" /></bean><s:authentication-manager alias="authenticationManager" /><bean id="authenticationProcessingFilterEntryPoint" class="org.springframework.security.ui.webapp.AuthenticationProcessingFilterEntryPoint"><property name="loginFormUrl" value="/login.action" /><property name="forceHttps" value="false" /></bean>
解决方案四:
在开头<sec:http auto-config="true" use-expressions="true">添加开启表达式.然后加一句<s:intercept-url pattern="/" access="isAuthenticated()" />试试表示拥有权限的人能访问 "/" 下所有的资源
解决方案五:
登录页面的form里是要写j_spring_security_check的,先试试不用数据库登录,成功后把authentication-manager的配置更换成用数据库登录再试:<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:s="http://www.springframework.org/schema/security"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.0.3.xsd"default-lazy-init="true"><description>SpringSecurity安全配置</description><s:http auto-config="true"> <s:intercept-url pattern="/login.jsp" filters="none"/> <s:intercept-url pattern="/index.jsp" filters="none"/> <s:intercept-url pattern="/demo/user/login" filters="none"/> <s:intercept-url pattern="/demo/user/doLogin" filters="none"/> <s:intercept-url pattern="/demo/user/welcome" filters="none"/> <s:intercept-url pattern="/demo/user/save" access="ROLE_1" /> <s:intercept-url pattern="/demo/user/new" access="ROLE_1" /> <s:form-login login-page="/login.action" default-target-url="/"authentication-failure-url="/login.action?error=1" /><s:logout logout-success-url="/login.action" /><!--s:remember-me key="e37f4b31-0c45-11dd-bd0b-0800200c9a66" /><s:concurrent-session-control max-sessions="1"exception-if-maximum-exceeded="false" expired-url="/login.action?error=3" /--></s:http><s:authentication-manager alias="authenticationManager"><s:authentication-provider><s:user-service><s:user name="admin" password="admin" authorities="ROLE_1, ROLE_2" /><s:user name="user" password="user" authorities="ROLE_1" /></s:user-service></s:authentication-provider></s:authentication-manager><!--s:authentication-manager alias="authenticationManager"><s:authentication-provider user-service-ref="userDetailsService"><s:password-encoder hash="plaintext" /></s:authentication-provider></s:authentication-manager><bean id="userDetailsService" class="com.zbxsoft.bid.service.UserDetailsServiceImpl" /--> </beans>

时间: 2024-11-01 18:56:04

spring security 中,配置登录页面,登录页面的action一定要是j_spring_security_check吗?的相关文章

asp.net怎么实现 在a页面中 通过button 在b页面的iframe里 打开c页面?

问题描述 asp.net怎么实现 在a页面中 通过button 在b页面的iframe里 打开c页面? 我现在首页上有个上传的按钮,如果没登录,点击会提醒登录,如果登陆了,就跳到会员中心的上传界面,会员中心是左侧显示菜单,右侧iframe显示界面,上传本身就是菜单中的一项,不知道怎么实现这个跳转,求助求助~~ 解决方案 <inpupt type="text" onclick="<%=Session["isonline"]==null?"

springmvc-spring mvc简单问题之实现登录页面到主页面的跳转映射

问题描述 spring mvc简单问题之实现登录页面到主页面的跳转映射 我现在有两个静态页面login.jsp和major.jsp 控制器里代码如下: @RequestMapping(value = "/login") public ModelAndView login(HttpServletRequest request, HttpServletResponse response) throws Exception { Map<String, Object> model

Spring Security 2配置精讲 上

安全权限管理手册 http://www.family168.com/oa/springsecurity/html/ 众所周知,Spring Security针对Acegi的一个重大的改进就在于其配置方式大大简化了.所以如果配置还是基于Acegi-1.X这样比较繁琐的配置方式的话,那么我们还不如直接使用Acegi而不要去升级了.所以在这里,我将结合一个示例,重点讨论一下Spring Security 2是如何进行配置简化的. 搭建基础环境 首先我们为示例搭建基本的开发环境,环境的搭建方式,可以参考

加密-在spring security中管理员是怎么分配账号和密码的

问题描述 在spring security中管理员是怎么分配账号和密码的 将用户.角色.资源放在了后台管理.管理员自己分配账号和密码,利用使用多种加密算法(MD5.SHA.SHA256),默认的是选择SHA256加密算法.在springContext-security.xml进行配置.请问知道管理员怎么在数据库中分配账号和密码的?那些数据库中的可是密文(密文是64位的),而且是不可逆的.

跪求spring security中认证和授权的关系

问题描述 跪求spring security中认证和授权的关系 是认证里边包含授权,还是认证和授权是一体的,他们的顺序是怎么样的?过程是怎么样的,蒙了.... 解决方案 http://sishuok.com/forum/blogPost/list/4313.html 解决方案二: Spring security认证与授权(二)

急求解决Spring security中认证后的UserDetailsService接口问题!

问题描述 问题描述: 登录页面除开j_username和j_password,还有siteId参数,我如何才能在UserDetailsService的实现类里方法loadUserByUsername中获取到提交上来的siteId这个参数. 解决方案 你可以实现AuthenticationSuccessHandler接口,然后配置到UsernamePasswordAuthenticationFilter中,然后在里面通过request获取siteid这个值,再做相应的处理解决方案二:当初我也是这么

在Java的Spring框架中配置Quartz的教程_java

Spring中配置Quartz的过程: 1.导入JAR包 quartz需要的JAR包,已经包含在spring中,位置在spring解压后目录的 \lib\quartz 下的quartz-all-1.6.1.jar, 将其拷贝到工程 的 WEB-INF/lib 下就行了. 2.配置web.xml,让spring启动时加载quartz的配置文件 <?xml version="1.0" encoding="UTF-8"?> <web-app versio

spring MVC中定义异常页面

如果我们在使用Spring MVC的过程中,想自定义异常页面的话,我们可以使用DispatcherServlet来指定异常页面,具体的做法很简单: 下面看我曾经的一个项目的spring配置文件: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 <?xml version="1.0" encoding="UTF-8" ?> <beans xmlns=

CXF客户端配置请求超时限制-SocketTimeoutException(Spring配置文件中配置和通过代码进行配置)

在用cxf  开发webservice应用时,客户端老报  java.net.SocketTimeoutException: Read timed out  原因为连接超时,google 参考链接  Spring下设置CXF的WebService客户端超时时长  http://ajava.org/course/open/16514.html  https://cwiki.apache.org/CXF20DOC/client-http-transport-including-ssl-support