Spring Security 安全认证框架入门
应用场景
包括但不限于登录验证 用户权限管理
如何使用
下面搭一个demo入门案例(idea创建)完全不用写java类
1:使用骨架创建maven-webapp工程
> <?xml version="1.0" encoding="UTF-8"?>
<!--配置未登录放行的页面资源-->
<security:http pattern="/login.jsp" security="none"></security:http>
<security:http pattern="/failer.jsp" security="none"></security:http>
<!--配置拦截资源的规则
auto-config="true" 应用框架的默认配置
use-expressions="false" 关闭表达式的应用
intercept-url pattern="/**" 拦截的请求路径
access="ROLE_ADMIN 允许访问的角色 注意必须ROLE开头的字符串角色
-->
<security:http auto-config="true" use-expressions="false">
<security:intercept-url pattern="/**" access="ROLE_ADMIN"></security:intercept-url>
<!--添加自定义登录的处理节点-->
<security:form-login default-target-url="/index.jsp"
authentication-failure-url="/failer.jsp"
login-processing-url="/login" login-page="/login.jsp"></security:form-login>
<!--处理登录没有权限的问题-->
<security:access-denied-handler error-page="/403.jsp"></security:access-denied-handler>
<!--关闭伪造跨域请求的拦截-->
<security:csrf disabled="true"></security:csrf>
</security:http>
<!--验证能否访问的节点-->
<security:authentication-manager>
<security:authentication-provider>
<!--使用业务类验证是否可以登录是否拥有权限-->
<security:user-service>
<!--初始化测试使用的两个账号 并且赋予角色
{noop} 表示密码为明文密码匹配 原始密码 123456
密文密码 加密后密码 f34kJFA*34_34FAfdfd
-->
<security:user name="admin" password="{noop}admin" authorities="ROLE_ADMIN"></security:user>
<security:user name="user" password="{noop}user" authorities="ROLE_USER"></security:user>
</security:user-service>
</security:authentication-provider>
</security:authentication-manager>
2:在resource下创建 security.xml `` <?xml version="1.0" encoding="UTF-8"?>
<!--配置未登录放行的页面资源-->
<security:http pattern="/login.jsp" security="none"></security:http>
<security:http pattern="/failer.jsp" security="none"></security:http>
<!--配置拦截资源的规则
auto-config="true" 应用框架的默认配置
use-expressions="false" 关闭表达式的应用
intercept-url pattern="/**" 拦截的请求路径
access="ROLE_ADMIN 允许访问的角色 注意必须ROLE开头的字符串角色
-->
<security:http auto-config="true" use-expressions="false">
<security:intercept-url pattern="/**" access="ROLE_ADMIN"></security:intercept-url>
<!--添加自定义登录的处理节点-->
<security:form-login default-target-url="/index.jsp"
authentication-failure-url="/failer.jsp"
login-processing-url="/login" login-page="/login.jsp"></security:form-login>
<!--处理登录没有权限的问题-->
<security:access-denied-handler error-page="/403.jsp"></security:access-denied-handler>
<!--关闭伪造跨域请求的拦截-->
<security:csrf disabled="true"></security:csrf>
</security:http>
<!--验证能否访问的节点-->
<security:authentication-manager>
<security:authentication-provider>
<!--使用业务类验证是否可以登录是否拥有权限-->
<security:user-service>
<!--初始化测试使用的两个账号 并且赋予角色
{noop} 表示密码为明文密码匹配 原始密码 123456
密文密码 加密后密码 f34kJFA*34_34FAfdfd
-->
<security:user name="admin" password="{noop}admin" authorities="ROLE_ADMIN"></security:user>
<security:user name="user" password="{noop}user" authorities="ROLE_USER"></security:user>
</security:user-service>
</security:authentication-provider>
</security:authentication-manager>
3: 将security.xml 引入到web.xml中 `` <?xml version="1.0" encoding="UTF-8"?>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<!--监听器启动加载springSecurity的配置文件-->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:security.xml</param-value>
</context-param>
<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>
如何拓展该框架
1:英文还一般 使用chrome的自动翻译可以看懂 https://spring.io/projects/spring-security
2:完全不会:先去查字典 了解高频的词汇 否则连类都不认识 更不用说自定义权限管理
3:本篇只有入门 深入了解留言 后续更新
框架原理解析
1 tomcat启动-》加载web.xml,配置security过滤器
2:浏览器输入地址-》服务器根据security.xml中的(springSecurityFilterChain)判断是否拦截
3:如果拦截 查看用户名密码 【表单中的<name,输入内容>】 注意必须使用post提交表单 否则失败
4:通过认证,跳转security.xml中配置的成功页面 否则去失败页面
后话:入门案例完全可以通过自定义filter完成本demo内容
框架本身支持加密 用户授权 权限管理 等多种 如果持续更新会做一些demo放在github上 欢迎下载使用