کانال بله, جهت پشتیبانی و اطلاع رسانی کانال بله, جهت پشتیبانی و اطلاع رسانی
عضویت

آموزش ذخیره اطلاعات در پایگاه داده در Spring Security

Remember me امنیت Spring

Remember me (RM) در امنیت Spring

RM یک ویژگی است که به کاربر اجازه دسترسی به برنامه را بدون ورود مجدد می دهد. دوره ورود کاربر پس از بستن مرورگر به اتمام می رسد و اگر کاربر مجددا با باز کردن مرورگر قصد دسترسی به برنامه را داشته باشد، درخواست ورود فعال می شود. اما می توان با استفاده از ویژگی RM از این ورود مجدد جلوگیری کرد. RM هویت کاربر را در کوکی (Cookie) یا پایگاه داده ذخیره می کند و از آن برای شناسایی کاربر استفاده می کند. این ویژگی را در مثال زیر پیاده سازی می کنیم. مثال را با هم می بینیم.

یک پروژه maven ایجاد کنید. یک پروژه maven با جزییات پروژه ایجاد کنید.


Spring Security Remember Me

پروژه در ابتدا به این شکل است.

Spring Security Remember Me 2

پیکربندی امنیت Spring

پروژه را برای پیاده سازی امنیت Spring پیکربندی کنید. پروژه به چهار فایل جاوای زیر احتیاج دارد. ابتدا پکیج com.javatpoint را ایجاد کنید و همه فایل ها را در آن قرار دهید.

// AppConfig.java

package com.javatpoint;  
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.javatpoint.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.javatpoint;    
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.javatpoint;    
import org.springframework.security.web.context.*;          
    public class SecurityWebApplicationInitializer    
        extends AbstractSecurityWebApplicationInitializer {    
    }  

// WebSecuiryConfig.java

در این کلاس، ایجاد کاربر و احراز هویت آن انجام می شود. متد rememberMe() درون متد configure() مسئول ذخیره و به یاد داشتن هویت کاربر است.

package com.javatpoint;  
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.javatpoint")    
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"));    
}    
}

کنترلر

یک کنترلر HomeController درون پکیج com.javatpoint.controller ایجاد کنید. کد کنترلر را ببینیم.

// HomeController.java

package com.javatpoint.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";  
    }  
}  

منظر ها (views)

منظر (صفحات JSP) را برای تولید خروجی در مرورگر، ایجاد کنید.

// index.jsp

< html>    
< head>      
< title>Home Page< /title>    
< /head>    
< body>    
Welcome to Javatpoint! < br> < br>

< a href="admin">Admin login< /a>    
< /body>    
< /html>

// admin.jsp

< html>    
< head>    
< meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  
< title>Home Page< /title>    
< /head>    
< body>    
Welcome Admin! ?  
< a href="logout">logout< /a>    
< /body>    
< /html>    

// login.jsp

این صفحه ورود سفارشی ماست که در آن جعبه گزینه RM را اضافه کردیم. کد را ببینیم.

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

< form action="$ {loginUrl}" method="post">         
    < c:if test="$ {param.error != null}">          
         < p>  
              Invalid username and password.  
         < /p>  
    < /c:if>  
    < c:if test="$ {param.logout != null}">         
         < p>  
              You have been logged out.  
         < /p>  
    < /c:if>  
    < p>  
         < label for="username">Username< /label>  
         < input type="text" id="username" name="username" />
      
    < /p>  
    < p>  
         < label for="password">Password< /label>  
         < input type="password" id="password" name="password" />
           
    < /p>   
    < p>   
         < label for="remember"> Remember me< /label>  
         < input type="checkbox" name="remember" />
      
    < /p>  
    < input type="hidden"
               30. name="$ {_csrf.parameterName}"
               31. value="$ {_csrf.token}" />
      
    < button type="submit" class="btn">Log in< /button>  
< /form>

وابستگی های پروژه

فایل pom.xml در ادامه قرار دارد که شامل همه وابستگی های مورد نیاز است.

// pom.xml

< project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">  
   < modelVersion>4.0.0< /modelVersion>  
   < groupId>com.javatpoint< /groupId>  
   < artifactId>springrememberme< /artifactId>  
   < version>0.0.1-SNAPSHOT< /version>  
   < packaging>war< /packaging>  
   < properties>    
     < maven.compiler.target>1.8< /maven.compiler.target>    
     < maven.compiler.source>1.8< /maven.compiler.source>    
< /properties>    
< dependencies>    
   < dependency>    
             < groupId>org.springframework< /groupId>    
             < artifactId>spring-webmvc< /artifactId>    
             < version>5.0.2.RELEASE< /version>    
         < /dependency>    
         < dependency>    
         < groupId>org.springframework.security< /groupId>    
         < artifactId>spring-security-web< /artifactId>    
         < version>5.0.0.RELEASE< /version>    
     < /dependency>    
< dependency>  
     < groupId>org.springframework.security< /groupId>  
     < artifactId>spring-security-core< /artifactId>  
     < version>5.0.4.RELEASE< /version>  
< /dependency>  
     < !-- https://mvnrepository.com/artifact/org.springframework.security/spring-security-config -->  
< dependency>  
     < groupId>org.springframework.security< /groupId>  
     < artifactId>spring-security-config< /artifactId>  
     < version>5.0.4.RELEASE< /version>  
< /dependency>  
       
         
         < !-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->    
< dependency>    
     < groupId>javax.servlet< /groupId>    
     < artifactId>javax.servlet-api< /artifactId>    
     < version>3.1.0< /version>    
     < scope>provided< /scope>    
< /dependency>    
< dependency>    
     < groupId>javax.servlet< /groupId>    
     < artifactId>jstl< /artifactId>    
     < version>1.2< /version>    
< /dependency>    
< /dependencies>    
  < build>    
    < plugins>    
        < plugin>    
            < groupId>org.apache.maven.plugins< /groupId>    
            < artifactId>maven-war-plugin< /artifactId>    
            < version>2.6< /version>    
            < configuration>    
                < failOnMissingWebXml>false< /failOnMissingWebXml>    
            < /configuration>    
        < /plugin>    
    < /plugins>    
< /build>    
< /project>  

ساختار پروژه

پس از اضافه کردن همه فایل ها، ساختار پروژه به این شکل می شود.

Spring Security Remember Me 3

سرور را اجرا کنید.


خروجی :

Spring Security Remember Me 4

روی لینک ورود ادمین کلیک کنید و وارد شوید.

Spring Security Remember Me 5

ببینید روی جعبه گزینه remember me کلیک کردیم.

Spring Security Remember Me 6

URL http ://localhost:8080/springrememberme/admin را کپی کنید و مرورگر را کاملا ببندید. پس از یک ثانیه مرورگر را باز کنید و URL کپی شده را وارد کنید.

ببینید! برای ورود درخواست نکرد و ما را به همان صفحه برد. زیرا ما گزینه remember me را هنگام ورود انتخاب کرده بودیم.


1399/02/03 1853 469
رمز عبور : tahlildadeh.com یا www.tahlildadeh.com
نظرات شما

نظرات خود را ثبت کنید...