struts2+springsecurity+spring整合

ssh框架使用springsecurity作为权限验证框架是可以的,因为springsecurity可以和spring集成。这里使用一个最简单的示例,通过整合,我们可以看到使用springsecurity登录过程。

这里的前提是我们已经整合了struts2+spring,所以只是将springsecurity加入进来。我们需要两步,创建一个spring-security.xml配置文件,配置springsecurity登录相关的配置。

这里,我们新建spring-security.xml配置文件,可以通过新建向导建立spring bean configuration,最后选择beans,security这两个namespace,如下图所示:

在spring-security.xml配置文件中,我们修改security这个命令空间为sec,然后配置内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:sec="http://www.springframework.org/schema/security"
	xsi:schemaLocation="http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-4.2.xsd
	http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <sec:http pattern="/" security="none"/>
    <sec:http auto-config="true" authentication-manager-ref="authentication-manager">
        <sec:intercept-url pattern="/**" access="isAuthenticated()"/>
        <sec:form-login 
           login-page="/"
        		login-processing-url="/login"
         		default-target-url="/admin/user!list.action"
         		authentication-failure-url="/"
         		username-parameter="username"
         		password-parameter="password"
        />
        <sec:headers disabled="true"/>
        <sec:csrf disabled="true"/>
        <sec:logout logout-url="/logout" logout-success-url="/"/>
    </sec:http>
   <sec:authentication-manager id="authentication-manager">
        <sec:authentication-provider>
            <sec:user-service>
               <sec:user name="admin" password="123456" authorities="ROLE_ADMIN"/>
            </sec:user-service>
        </sec:authentication-provider>
    </sec:authentication-manager>
</beans>

这里,我将security命令空间简写了sec,也可以不用修改,不用修改的话,配置就是<security:http></security:http>与<security:authentication-manager></security:authentication-manager>。

对于这个配置文件有必要说明一下:

  1. 登录页面,我们指定了是项目首页login-page="/"。不用springsecurity提供的默认页面。 
  2. 登录处理请求是login-processing-url="/login",指定了用户登录请求的处理url,所以我们的页面上<form action="/login" method="post"></form>可以这么写,action对应这里的login-processing-url,如果不定义,那么就是默认的j-spring-security-check。
  3. 登录页面用户名和密码参数通过uername-parameter,password-parameter在这里也做了定义,如果不定义,默认就是j_username,j_password
  4. 登录之后,跳转的页面通过default-target-url来指定了。
  5. 登录用户在配置文件里面通过authentication-manager配置写死了,我们用的是admin/123456这个用户名密码就可以登录系统。

配置好了spring-security.xml,我们就在web.xml文件中加入springSecurityFilterChain这个Filter。

需要注意的两点:

  1. springSecurityFilterChain这个过滤器的名字,不能更改。
  2. springSecurityFilterChain这个过滤器的filter-mapping映射配置一定要配置在struts2的filter-mapping之前。 

本人因为手贱,将springSecurityFilterChain简写或者随便写比如spring-security-filter-chain,结果启动项目就报错:

org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'spring-security-filter-chain' available
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:687)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getMergedLocalBeanDefinition(AbstractBeanFactory.java:1207)
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:284)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
	at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1086)

希望大家尽量不要犯这样低级的错误。 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

luffy5459

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值