【Spring Security实战系列】Spring Security实战(四)

 在前面三个实战中,登陆页面都是用的Spring Security自己提供的,这明显不符合实际开发场景,同时也没有退出和注销按钮,因此在每次测试的时候都要通过关闭浏览器来注销达到清除session的效果。
一 自定义页面

login.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib prefix="th" uri="http://www.springframework.org/tags/form" %>





    <%--
    
    --%>
    
    登陆


    
登陆失败
${sessionScope['SPRING_SECURITY_LAST_EXCEPTION'].message}
<%-- 特别要注意的是form表单的action是提交登陆信息的地址,这是security内部定义好的, 同时自定义form时,要把form的action设置为/j_spring_security_check。 注意这里要使用绝对路径,避免登陆页面存放的页面可能带来的问题。 --%>
新页面-登陆 <%--j_username,输入登陆名的参数名称,j_password,输入密码的参数名称,这两个正常情况下也不会修改--%> 用户:
密码:
<%-- _spring_security_remember_me,选择是否允许自动登录的参数名称。 可以直接把这个参数设置为一个checkbox,无需设置value,Spring Security会自行判断它是否被选中, 这也是security内部提供的,只需要配置,不需要自己实现。 --%> 两周之内不必登陆

说明:
1、特别要注意的是form表单的action是提交登陆信息的地址,这是security内部定义好的,同时自定义form时,要把form的action设置为/j_spring_security_check。注意这里要使用绝对路径,避免登陆页面存放的页面可能带来的问题。
2、j_username,输入登陆名的参数名称,j_password,输入密码的参数名称,这两个正常情况下也不会修改。
3、_spring_security_remember_me,选择是否允许自动登录的参数名称。可以直接把这个参数设置为一个checkbox,无需设置value,Spring Security会自行判断它是否 被选中,这也是security内部提供的,只需要配置,不需要自己实现。
二 配置制定的页面
配置文件如下:




    
    
    
    
    
    
    

    
    
    

    
        " />
        
        
        
        
        


        
        

        
        

        
        
        

        


        
        
            
        

        

    

    
    

    
    
    

    
    

    
    
        
           
            

        
    

说明:
1、form-login这个标签是配置登陆页面的,其中的属性login-page是配置登陆页面的,default-target-url配置登陆成功后跳转到的页面,authentication-failure-url配置认证失败后的跳转页面。
2、在上面的配置中,登陆页面肯定是不能拦截的,任何人都应该可以访问,配置表示允许匿名用户访问,就是不用身份都可以访问;还有另一种配置方式:,这种配置达到的目的都是一样的。
3、logout这个标签用来配置退出或者注销,其中的属性invalidate-session,配置否是要清除session,logout-success-url配置注销成功后的跳转页面,logout-url提交退出或者注销的地址,因此我们在配置退出或者注销的时候,只需要将url设置为/j_spring_security_logout即可,这个地址也是security内部实现了的。
4、form-login标签中还有一个特别要注意的属性use-expressions,如果设置为true,这配置access就要做相应的改变,否则项目启动的时候会报错,错误如下:


如果use-expressns="true"时,则表示改为 SpEL 表达式。 SpEL 允许使用特定的访问控制规则表达式语言。与简单的字符串如 ROLE_USER 不同,配置文件可以指明表达式语言触发方法调用、引用系统属性、计算机值等等。http标签中的配置改为如下:
    
        
        
        
        
        
        


        
        

        
        

        
        
        

        


        
        
            
        

        

    
配置文件中的其他配置(如applicationContext.xml、applicationContext-dataSource.xml、logback.xml、datasource.properties)在前面几篇博客中都有详细的讲解,这里就不赘述了。
三 其他文件

index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>






this is a user page

退出登陆

这里定义了两个页面,index.jsp用户和管理员都可以访问,adminPage.jsp只有管理员可以访问,同时两个页面都有注销按钮,注销按钮提交的地址也就是上面配置文件中的地址/j_spring_security_logout。

pom.xml和前面的一样,这里就不贴了。
四 结果
【Spring Security实战系列】Spring Security实战(四)_第1张图片
【Spring Security实战系列】Spring Security实战(四)_第2张图片
【Spring Security实战系列】Spring Security实战(四)_第3张图片
当输入普通用户的用户名和密码,同时勾选2周不用登陆后,因为adminPage.jsp页面要有管理员权限才能访问,所以普通用户访问失败,index.jsp页面就可以访问;这时关闭页面后,再次访问资源,因为勾选了2周不用登陆,所以可以成功访问;但是当点击退出登录后,再次访问是就会跳转到登陆页面,要求登陆才能访问。
【Spring Security实战系列】Spring Security实战(四)_第4张图片
【Spring Security实战系列】Spring Security实战(四)_第5张图片【Spring Security实战系列】Spring Security实战(四)_第6张图片
当输入管理员名和密码,同时勾选2周不用登陆,验证成功后,跳转到index.jsp,同时adminPage.jsp也可以访问,这时把一个页面关闭再重新访问资源时,因为勾选2周不用登陆,所以可以成功访问;然后注销,这是再访问资源时,就会跳转到登陆页面,要求登陆才能访问。

你可能感兴趣的:(spring,security)