Spring Security教程(四):自定义登录页

Spring Security教程(四):自定义登录页

 

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

一、自定义页面

login.html

"en" xmlns:th="http://www.w3.org/1999/xhtml">

    "UTF-8">
    第一个HTML页面

"en">

    "UTF-8">
    Title


自定义表单验证:

"f" action="/authentication/form" method="post">
用户名: "text" name="username">
密码: "password" name="password" >
"checkbox" name="remember_me" />记住我
"submit" type="submit" value="提交">

 

  1. 特别要注意的是form表单的action是提交登陆信息的地址,这是security内部定义好的,默认使用post提交,路径是/login,这里我们自定义为/authentication/form
  2. username,password输入登陆名的参数名称。security默认是这个名字,可以自己改
  3. remember_me,选择是否允许自动登录的参数名称。可以直接把这个参数设置为一个checkbox,无需设置value,Spring Security会自行判断它是否被选中,这也是security内部提供的,只需要配置,不需要自己实现。

 

二、配置制定的登陆页面

配置文件如下:




login-processing-url="/authentication/form" authentication-failure-url="/error.jsp"
authentication-success-forward-url="/index.jsp"/>


 

 配置的登陆成功后的页面,index.jsp上面自定义了退出登录



登陆成功,欢迎来到首页


退出:

 

  1. form-login这个标签是配置登陆页面的
  2. login-page="/login.html" 自定义的登陆页面
  3. username-parameter="username" password-parameter="password"   可以在这里更改自定义的参数名称
  4. login-processing-url="/authentication/form" 登陆的路径,security默认的/login,这里是我们自定义的
  5. authentication-failure-url="/error.jsp"  登陆错误的页面
  6. authentication-success-forward-url="/index.jsp" 登陆成功后的跳转页面
  7. 在上面的配置中,登陆页面肯定是不能拦截的,任何人都应该可以访问,配置表示允许匿名用户访问,就是不用身份都可以访问;
  8. logout这个标签用来配置退出或者注销,其中的属性invalidate-session,配置否是要清除session,logout-success-url配置注销成功后的跳转页面,logout-url="/logout_zy",security默认的路径是/logout,delete-cookies="JSESSIONID",退出登录后删除cookie,这样防止退出后,你没关闭浏览器,他还会带着之前的cokie请求访问。
配置文件中的其他配置在前面几篇博客中都有详细的讲解,这里就不赘述了。

三、整体配置

"1.0" encoding="UTF-8"?>
"http://www.springframework.org/schema/beans"
       xmlns:security="http://www.springframework.org/schema/security"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 
       http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security.xsd">

    base-package="com.zy">
        
        "annotation" expression="org.springframework.stereotype.Controller"/>
    

    
    "dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
        
        "driverClassName" value="com.mysql.jdbc.Driver" />
        "url" value="jdbc:mysql://localhost:3306/test" />
        "username" value="root" />
        "password" value="123456" />

        
        "filters" value="stat" />

        
        "maxActive" value="20" />
        "initialSize" value="1" />
        "minIdle" value="1" />

        
        "maxWait" value="60000" />

        
        "timeBetweenEvictionRunsMillis" value="60000" />

        
        "minEvictableIdleTimeMillis" value="300000" />

        "testWhileIdle" value="true" />
        "testOnBorrow" value="false" />
        "testOnReturn" value="false" />

        
        "poolPreparedStatements" value="true" />
        "maxOpenPreparedStatements" value="20" />
    
    
    
    
    "sqlsessionfactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        
        "dataSource" ref="dataSource"/>
        
        "mapperLocations" value="classpath:mapper/*.xml"/>
    
    
    class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    "basePackage" value="com.zy.dao"/>
    
    
    
    
    "true">
        "/admin.jsp"  access="hasAnyRole('ROLE_ADMIN')"/>
        "/login.html" access="permitAll()"/>
        "/**" access="hasAnyAuthority('ROLE_ADMIN,ROLE_USER')"/>
        "/login.html" username-parameter="username" password-parameter="password" 
                             login-processing-url="/authentication/form" authentication-failure-url="/error.jsp" 
                             authentication-success-forward-url="/index.jsp"/>
        "/logout_zy" invalidate-session="false"  logout-success-url="/login.html"/>
        "true"/>
    
    
        
            
            
            ref="dataSource" users-by-username-query="select username,password,status as enabled from user where username = ?"
                                        authorities-by-username-query="select user.username,role.name from user,role,user_role where user.id=user_role.user_id and 
    user_role.role_id=role.id and user.username=?"/>
            
            
            
                
                
            
            ref="noOpPasswordEncoder"/>
        
    
    "noOpPasswordEncoder" class="org.springframework.security.crypto.password.NoOpPasswordEncoder"/>

 

四、结果

Spring Security教程(四):自定义登录页_第1张图片

 

 

当输入普通用户的用户名和密码,同时勾选2周不用登陆后,因为adminPage.jsp页面要有管理员权限才能访问,所以普通用户访问失败,index.jsp页面就可以访问;这时关闭页面后,再次访问资源,因为勾选了2周不用登陆,所以可以成功访问;但是当点击退出登录后,再次访问是就会跳转到登陆页面,要求登陆才能访问。

 

当输入管理员名和密码,同时勾选2周不用登陆,验证成功后,跳转到index.jsp,同时admin.jsp也可以访问,这时把一个页面关闭再重新访问资源时,因为勾选不用登陆,所以可以成功访问;然后注销,这是再访问资源时,就会跳转到登陆页面,要求登陆才能访问。

点击了退出之后,就跳转到登陆页面。

你可能感兴趣的:(Spring Security教程(四):自定义登录页)