1.使用这个框架首先要导入 Spring的jar包,然后导入 Spring Security 的5个jar包
2.先配置web.xml文件,配置filter
<!--配置个filter -->
<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>
</filter-mapping>
3.在有auto-config="true"时候,框架会自动给配置一个登陆界面 ,下面就是一套配置
<security:http auto-config="true">
<security:intercept-url pattern="/user.jsp" access="ROLE_USER"/>
<security:intercept-url pattern="/admin.jsp" access="ROLE_ADMIN"/>
<security:http auto-config="true">
<security:authentication-manager>
<security:authentication-provider>
<security:user-service>
<security:user name="user" password="user" authorities="ROLE_USER"/>
<security:user name="admin" password="admin" authorities="ROLE_USER,ROLE_ADMIN"/>
</security:user-service>
</security:authentication-provider>
</security:authentication-manager>
4.可以自定义登陆界面和登出
<security:form-login
login-page="/login.jsp"
username-parameter="username"
password-parameter="password"
login-processing-url="/login"
default-target-url="/logout.jsp"
always-use-default-target="true"
authentication-success-handler-ref="authenticationSuccessHandler"
/>
1.login-page="/login.jsp" 配置前台的页面 action
2.login-processing-url="/login" 允许的url
3.default-target-url="/logout.jsp" 登陆成功显示的页面
4.always-use-default-target="true" 只要登录成功就显示 default-target-url="/logout.jsp" 这上面的页面
5.authentication-success-handler-ref="authenticationSuccessHandler" 如果登陆成功的话,就会调用这个方法,可以添加业务逻辑处理,
此时将忽略 default-target-url 和 always-use-default-target
<security:logout
logout-url="/logout"
invalidate-session="true"
success-handler-ref="logoutSuccessHandler"
/>
1.logout-url="/logout" 登出的url
2.invalidate-session="true" 是否登出时候,销毁session 是的
3.success-handler-ref="logoutSuccessHandler" 可以在其中编写登陆实际的业务逻辑.
4.logout-success-url: 登出成功后的响应页面, 默认为 index.jsp
5.注意 success-handler-ref="logoutSuccessHandler" 和 logout-success-url 只能使用一个
5.自定义用户的信息 (这个是设置用户的密码,和用户的信息之类的)
创建UserDetailsService接口的实现类,实现方法 利用传入的 username 从数据库中获取用户信息, 然后封装成一个 UserDetails 对象返回.
密码可以加密,而且还是从数据库里取的
配置文件信息<!--设置密码加密的方式 -->
<security:password-encoder hash="md5">
<security:salt-source user-property="username"/>
</security:password-encoder>
加深的知识
6.为下属写方法,设置拦截界面和用户的权限(这个方法是设置拦截的页面和用户的权限)
1.MyFilterInvocationSecurityMetadataSource 实现 FactoryBean<DefaultFilterInvocationSecurityMetadataSource>
下属的方法在getObject()方法里为 返回的LinkedHashMap<String,List<String>>赋值, 遍历 获取 key 和 value ,
2.返回一个DefaultFilterInvocationSecurityMetadataSource对象
3.MyBeanPostProcessor 实现BeanPostProcessor 在这里面 替换属性, FilterSecurityInterceptor MyFilterInvocationSecurityMetadataSource
FilterSecurityInterceptor 框架默认使用这个的值, 我们把它的setSecurityMetadataSource 属性替换了 就可以使用我们想让他使用的属性了
4.流程就是 FilterInvocationSecurityMetadataSourceMapBuilderImpl 调用 MyFilterInvocationSecurityMetadataSource 获取值以后, 通过我们自己写的
MyBeanPostProcessor 实现属性的替换 即可