前面讲到了SpringSecurity的简单配置,今天做一个简单的测试,先看配置文件



[html]  view plain copy



    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <beans xmlns="http://www.springframework.org/schema/beans"
    3. xmlns:sec="http://www.springframework.org/schema/security"
    4. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    5. xsi:schemaLocation="http://www.springframework.org/schema/beans  
    6.         http://www.springframework.org/schema/beans/spring-beans-3.0.xsd  
    7.         http://www.springframework.org/schema/security  
    8. >
    9.   
    10. <!-- 配置不过滤的资源(静态资源及登录相关) -->
    11. <sec:http pattern="/**/*.css" security="none"></sec:http>
    12. <sec:http pattern="/**/*.jpg" security="none"></sec:http>
    13. <sec:http pattern="/**/*.jpeg" security="none"></sec:http>
    14. <sec:http pattern="/**/*.gif" security="none"></sec:http>
    15. <sec:http pattern="/**/*.png" security="none"></sec:http>
    16. <sec:http pattern="/js/*.js" security="none"></sec:http>
    17.       
    18. <sec:http pattern="/login.jsp" security="none"></sec:http>
    19. <sec:http pattern="/getCode" security="none" /><!-- 不过滤验证码 -->
    20. <sec:http pattern="/test/**" security="none"></sec:http><!-- 不过滤测试内容 -->
    21.       
    22. <sec:http auto-config="true">
    23.           
    24. <sec:intercept-url pattern="/app.jsp" access="ROLE_SERVICE"/>
    25. <sec:intercept-url pattern="/**" access="ROLE_ADMIN"/>
    26.               
    27. </sec:http>
    28.       
    29. <sec:authentication-manager>
    30. <sec:authentication-provider>
    31. <sec:user-service >
    32. <sec:user name="admin" password="admin" authorities="ROLE_ADMIN"/>
    33. </sec:user-service>
    34. </sec:authentication-provider>
    35. </sec:authentication-manager>
    36.       
    37. </beans>




    其中

    <sec:http pattern="" security="none"></sec:http>

    是忽略拦截某些资源的意思,主要是针对静态资源

    <sec:intercept-url pattern="/app.jsp" access="ROLE_SERVICE"/>

    表示访问app.jsp时,需要ROLE_SERVICE权限

    <sec:intercept-url pattern="/**" access="ROLE_ADMIN"/>

    表示访问任何资源都需要ROLE_ADMIN权限。

    注:/**的配置要放到最后,因为如果放到最前面的话就失去了拦截意义,任何只要有ROLE_ADMIN权限的用户都可以访问任何资源,并不会对app.jsp拦截。因为在访问app.jsp的时候先经过<sec:intercept-url pattern="/**" access="ROLE_ADMIN"/>,、/**又表示任何资源,所以只要具有ROLE_ADMIN权限就会放行。如果放到最后,先经过<sec:intercept-url pattern="/app.jsp" access="ROLE_SERVICE"/>,这时候访问app.jsp是就会先判断用户是否有ROLE_SERVICE权限,如果有则放行,反之拦截。

    权限必须已ROLE_开头,在后面的文章中我们会讲到如何修改权限头和去掉权限头

    authentication-manager用来配置用户管理,在这里我们定义了一个admin用户并且具有ROLE_ADMIN权限,也就是说我们访问任何资源都可以但是访问app.jsp时将被拦截

    在没有自定义登录页面之前,SpringSecurity会自动生成登录页面,如下图

    spring security拦截密码错误 spring security不拦截_用户名



    然后输入admin/admin登录

    spring security拦截密码错误 spring security不拦截_spring_02

    然后访问app.jsp发现已被spring拦截,说明我们的配置成功了

    spring security拦截密码错误 spring security不拦截_用户名_03


    符:在JSP页面获取当前登录的用户名的方法

    首先引入taglib



    [html]  view plain copy



      1. <%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags" %>


      然后在jsp页面中使用下面的方法就可以获取到用户名了


      [html]  view plain copy


        1. <sec:authentication property="name"/>