Spring Security3.0入门
所有的权限验证都混杂在业务逻辑中,用户的每个操作可能都需要对用户是否有该权限进行判断。类似这样的验证代码被分散在系统的许多地方,难以维护。
正如系统日志,事务管理等这些系统级的服务一样,我们应该将它作为系统的一个单独的“切面”进行管理,以达到业务逻辑与系统级的服务真正分离的目。
Spring Security将系统的安全逻辑从业务中分离出来。
Spring Security提供有若干个过滤器,它们能够拦截Servlet请求,并将这些请求转给认证和访问的决策管理器处理,从而增强安全性。
Spring Security3.0简介
Spring Security,这是一种基于Spring AOP和Servlet过滤器的安全框架。
它提供全面的安全性解决方案,同时在 Web 请求级和方法调用级处理身份确认和授权。
它提供了一组可以在Spring应用上下文中配置的Bean,充分利用了依赖注入(DI,Dependency Injection)和AOP(面向切面)技术
配置 web.xml 文件
服务启动时加载所有以applicationContext开头的xml文件
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath:applicationContext*.xml
</param-value>
</context-param>
<!--Spring容器启动监听器-->
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<!—代理过滤器的类,它就相当于是一个入口,web容器启动的时候,由它到spring容器中启动 spring Security 需要的过滤器链。-->
配置applicationContext.xml
配置applicationContext.xml
auto-config属性值为true,表示配置SpringSecurity自带的所有过滤器。
intercept-url pattern定义要拦截的访问地址,/**表示拦截src下所有访问路径。
access 属性表示可以访问此路径的角色。
那么 ROLE_USER角色 在哪里定义呢?
如果用户名为 user,密码为 user 的用户成功登录了,它的角色是 ROLE_USER ,那么他可以访
问规定的资源。 authorites属性表示设置固定的角色
编写首页
目前为止,项目中只有一个 index.jsp
在这个页面上只需要写一句话
将项目部署到 web 服务器中,然后访问首页 index.jsp,我们发现首页并没有出现,而是跳转到了 一个登录页面上。
因为项目刚启动,第一次访问的时候,没有任何用户登录,而在配置文件中我们拦截的是所有的请求,所以第一次请求被拦截了。
输入刚才在配置文件中的配置
用户名:user,密码:user
提交后,发现能够正确的转到首页
那个登录页面哪里来的?
当有请求来到的时候,Spring Security 框架开始检查要访问的资源是否有权限访问,如果当前登录用户无权限访问或者当前根本就没有用户登录,则 Spring Securtiy 框架就会自动生成一个 登录页面。
当在登录页面进行了正确的登录后,Spring Security会自动进行登录验证,如果成功登录,将用户信息放到 session 中,然后转到先前请求的页面上。
我们可以在 index 中将 session 中的 key—value 打印出来,看看 Spring Security 将用户信息如何放到 session 中的: