由于还在实习,所以项目中分给我的任务也很简单。但是又由于毕业设计我的论文题目是我做的项目,老师说必须有亮点。
我就在论文里面加了项目中有关单点登录和权限验证。但是,既然写了。自己总有明白其中的道理吧。
于是,这几天在看有关spring security的相关文章,看了三天外加同事写的代码,总算是有点头绪了。下面做一个小小的总结。
希望以后再看起来能发现自己的问题所在。
---------------------------------------------华丽的分割线-----------------------------------------------------
我读程序喜欢按着一条线来读。spring security也不例外。
因为我们的单点登录和权限验证用到了他,我就按着登录的流程来。
在登录之前,先在web.xml中配置spring security的相关配置。
1.读取spring配置文件,至于下面的监听,网上有个文章说,要么用监听,要么用servlet来标示这个ContextLoaderListener。然后才能读取吧。(理解很模糊,先自己总结,以后再发现自己错误!)
<!--读取spring配置文件-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<listener>
<listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
</listener>
2.有关spring security的过滤器。默认的spring security的框架中有自己的过滤器链。只要配置了下面的代码,就是所有的请求都会经过这个过滤器链。当然可以在其中配置自己的过滤器。方法是在spring的applicationContext.xml文件中加入bean,然后标示<sec:custom-filter />其中有属性after、before、position。用于标示你自己的过滤器加载spring security中的那个过滤器之前或之后。
<!-- SpringSecurity config -->
<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>
<dispatcher>FORWARD</dispatcher>
<dispatcher>REQUEST</dispatcher>
</filter-mapping>
3.在applicationContext中有这么一段配置
登录页面,不需要访问权限
<sec:intercept-url pattern="/login.jsp" filters="none" access="IS_AUTHENTICATED_ANONYMOUSLY"/>
管理员页面需要管理员权限
<sec:intercept-url pattern="/admin.jsp" access="ROLE_ADMIN"/>
其他所有页面需要用户权限
<sec:intercept-url pattern="/**" access="ROLE_USER"/>
而权限的设置,是通过一个远程服务器数据库,在数据库中添加如下三张表:users,role,users_role
下面的配置是配置spring security的默认登录页面。就是验证之后若无权限,默认进入的登录页面。在spring security的默认登录请求中需要添加如下字符串:j_spring_security_check;这是spring security默认的登录请求包含的字符串(这块我有点不理解,或者是理解的有点偏差吧),听说这个可以自己手动修改,因为毕竟都不熟悉。所以我同事也没有修改,我也就按着他这个来看的。
<sec:form-login login-page="/page/login/login.faces" default-target-url="/"
authentication-failure-url="/page/login/login.faces?error=true"/>
4.在spring security中是通过这样的方法来获取当前用户的session:SecurityContextHolder.getContext().getAuthentication()(准确说是获取用户信息)。我同事说是获取session。
========================分割线====================================
目前理解这么点。以后慢慢深入了解吧……