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>。

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

需要注意的两点:
- springSecurityFilterChain这个过滤器的名字,不能更改。
- 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)
希望大家尽量不要犯这样低级的错误。
590

被折叠的 条评论
为什么被折叠?



