spring 教程

spring security自定义登录 -钻石棋牌

spring security提供了它自己的内置登录模块来对用户进行身份验证。它验证用户凭据并提供对应用程序的访问权限。

该模块呈现的登录页面是内置的。因此,我们不需要创建新的jsp页面。但是,如果我们要自定义登录页面,那我们该怎么做呢?

答案是,我们可以创建自己的jsp登录页面并将其集成到应用程序中。在本主题中,我们将创建一个自定义登录页面并将使用它来登录。

请参见示例。通过提供以下详细信息来创建maven项目。


spring security自定义登录

完成后,它将创建以下项目结构。


spring security性自定义登录2

安全性配置

配置项目以应用spring security性。它需要以下四个文件。创建一个包 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

package com.nhooo;
import org.springframework.context.annotation.*;  
//import org.springframework.security.config.annotation.authentication.builders.*;  
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.core.userdetails.userdetailsservice;  
import org.springframework.security.provisioning.inmemoryuserdetailsmanager;
import org.springframework.security.web.util.matcher.antpathrequestmatcher;
import org.springframework.web.servlet.config.annotation.webmvcconfigurer;  
@enablewebsecurity  
@componentscan("com.nhooo")  
public class websecurityconfig extends websecurityconfigureradapter {  
  
@bean  
public userdetailsservice userdetailsservice() {  
    inmemoryuserdetailsmanager manager = new inmemoryuserdetailsmanager();  
    manager.createuser(user.withdefaultpasswordencoder()
    .username("irfan").password("khan123").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()
      .logout()
      .logoutrequestmatcher(new antpathrequestmatcher("/logout"));
}  
}

请参阅,在configure方法中,在formlogin()之后,使用方法 loginpage("/login")。这是调用自定义登录页面所需的实际方法。

查看

首先创建我们自己的登录页面。根据spring官员的说法,登录页面应如下所示。

//login.jsp

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

       
            
        

            invalid username and password.         

                         

            you have been logged out.         

         

        username                 

    

        password                  

         log in

//index.jsp

  
    
home page  
  
  

 welcome to nhooo! 
 

login here   

//admin.jsp

  
  
  
home page  
  
  
login successful!
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";  
    }  
}

项目依赖项

//pom.xml


  4.0.0
  com.nhooo
  springcustomlogin
  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

运行服务器

输出:


spring security自定义登录4

现在,通过提供用户凭据登录。


spring security自定义登录5
spring security自定义登录6

看,它工作正常。现在,我们可以根据需要创建更具装饰性和个性化的装饰。

钻石棋牌的友情链接:

网站地图