spring 教程

spring security记住我功能 -888棋牌游戏

"记住我"功能使用户无需重新登录即可访问应用程序。用户的登录会话在关闭浏览器后终止,如果用户再次打开浏览器再次访问该应用程序,则会提示登录。

但是我们可以使用"记住我"功能来避免重新登录。它将用户的身份存储到cookie或数据库中,并用于标识用户。

我们正在以下示例中实现该身份。让我们看一个实例。

创建maven项目

首先创建一个maven项目并提供项目详细信息。


spring security记住我

最初,项目看起来像这样:


spring security记住我2

spring security配置

配置项目以实现spring安全。它需要以下四个java文件。首先创建一个包 com.nhooo 并将所有文件放入其中。

//appconfig.java

package com.nhooo;
import org.springframework.context.annotation.bean;  
import org.springframework.context.annotation.componentscan;  
import org.springframework.context.annotation.configuration;  
import org.springframework.web.servlet.config.annotation.enablewebmvc;  
import org.springframework.web.servlet.view.internalresourceviewresolver;  
import org.springframework.web.servlet.view.jstlview;  
@enablewebmvc  
@configuration  
@componentscan({ "com.nhooo.controller.*" })  
public class appconfig {  
    @bean  
    public internalresourceviewresolver viewresolver() {  
        internalresourceviewresolver viewresolver  
                          = new internalresourceviewresolver();  
        viewresolver.setviewclass(jstlview.class);  
        viewresolver.setprefix("/web-inf/views/");  
        viewresolver.setsuffix(".jsp");  
        return viewresolver;  
    }  
}

//mvcwebapplicationinitializer.java

package com.nhooo;  
import org.springframework.web.servlet.support.abstractannotationconfigdispatcherservletinitializer;  
public class mvcwebapplicationinitializer extends  
        abstractannotationconfigdispatcherservletinitializer {  
    @override  
    protected class[] getrootconfigclasses() {  
        return new class[] { websecurityconfig.class };  
    }  
    @override  
    protected class[] getservletconfigclasses() {  
        // todo auto-generated method stub  
        return null;  
    }  
    @override  
    protected string[] getservletmappings() {  
        return new string[] { "/" };  
    }  
}

//securitywebapplicationinitializer.java

package com.nhooo;  
import org.springframework.security.web.context.*;        
    public class securitywebapplicationinitializer  
        extends abstractsecuritywebapplicationinitializer {  
    }

//websecurityconfig.java

在此类中,我们还将创建用户并进行身份验证。 configure()方法内部的rememberme()方法负责记住并存储用户身份。

package com.nhooo;
import org.springframework.context.annotation.*;    
import org.springframework.security.config.annotation.web.builders.httpsecurity;  
import org.springframework.security.config.annotation.web.configuration.*;  
import org.springframework.security.core.userdetails.*;  
import org.springframework.security.provisioning.inmemoryuserdetailsmanager;
import org.springframework.security.web.util.matcher.antpathrequestmatcher;  
@enablewebsecurity  
@componentscan("com.nhooo")  
public class websecurityconfig extends websecurityconfigureradapter {  
@bean  
public userdetailsservice userdetailsservice() {  
    inmemoryuserdetailsmanager manager = new inmemoryuserdetailsmanager();  
    manager.createuser(user.withdefaultpasswordencoder()
    .username("admin").password("admin123").roles("admin").build());  
    return manager;  
}  
  
@override  
protected void configure(httpsecurity http) throws exception {  
    
      http.authorizerequests().
      antmatchers("/index", "/user","/").permitall()
      .antmatchers("/admin").authenticated()
      .and()
      .formlogin()
      .loginpage("/login")
      .and()
      .rememberme()
      .key("rem-me-key")
      .remembermeparameter("remember") // it is name of checkbox at login page
      .remembermecookiename("rememberlogin") // it is name of the cookie
      .tokenvalidityseconds(100) // remember for number of seconds
      .and()
      .logout()
      .logoutrequestmatcher(new antpathrequestmatcher("/logout"));  
}  
}

控制器

com.nhooo.controller 包内创建一个控制器homecontroller。请参阅控制器代码。

//homecontroller.java

package com.nhooo.controller;
import org.springframework.stereotype.controller;
import org.springframework.web.bind.annotation.requestmapping;
import org.springframework.web.bind.annotation.requestmethod;
@controller
public class homecontroller {
    @requestmapping(value = "/", method = requestmethod.get)
    public string index() {
        return "index";
    }
    @requestmapping(value = "/login", method = requestmethod.get)
    public string login() {
        return "login";
    }
    @requestmapping(value = "/admin", method = requestmethod.get)
    public string admin() {
        return "admin";
    }
}

视图

创建视图(jsp页面)以将输出生成到浏览器。

//index.jsp

  
    
home page  
  
  
welcome to nhooo! 
 
admin login     

//admin.jsp

  
  
  
home page  
  
  
welcome admin! ?
logout  
  

//login.jsp

这是我们的自定义登录页面,我们在其中添加了"记住我"复选框。查看代码。

<%@ taglib
    prefix="c"
    uri="http://java.sun.com/jsp/jstl/core" 
%>

       
            
        

            invalid username and password.         

                         

            you have been logged out.         

         

        username                 

    

        password                  

    

         remember me              

         log in

项目依赖项

以下是我们的pom.xml文件,其中包含所有必需的依赖项。

//pom.xml


  4.0.0
  com.nhooo
  springrememberme
  0.0.1-snapshot
  war
    
    1.8  
    1.8  
  
  
    
            org.springframework  
            spring-webmvc  
            5.0.2.release  
          
          
        org.springframework.security  
        spring-security-web  
        5.0.0.release  
      

    org.springframework.security
    spring-security-core
    5.0.4.release

    

    org.springframework.security
    spring-security-config
    5.0.4.release

    
      
          
  
    javax.servlet  
    javax.servlet-api  
    3.1.0  
    provided  
  
  
    javax.servlet  
    jstl  
    1.2  
  
  
    
      
          
            org.apache.maven.plugins  
            maven-war-plugin  
            2.6  
              
                false  
              
          
      
  

项目结构

添加所有文件后,项目结构如下所示:


spring security记住我3

运行服务器

输出:


 图片.png

单击admin登录链接并登录。


spring security记住我5

看,我们有 单击"记住我" 复选框。


spring security记住我6

复制url: http://localhost:8080/springrememberme/admin 并完全关闭浏览器。在打开第二个浏览器后,粘贴复制的url。

请参阅,它不会要求登录并将我们登录到同一页面。因为我们确实在登录时选中了"记住我"按钮。

888棋牌游戏的友情链接:

网站地图