مشخصات مقاله
-
428
-
0.0
-
2518
-
0
-
0
Security با دستورات Java در Spring
مثال Java Spring Security
پروژه Spring Security با استفاده از پیکربندی Java
فریمورک Spring پشتیبانی از پیکربندی جاوا را در Spring 3.1 اضافه کرد. در Spring Security، پیکربندی جاوا به به بحث Security در Spring 3.2 اضافه شد که این امکان را به ما داد تا Spring Security را بدون نوشتن حتی یک خط xml پیکربندی کنیم.
در اینجا مثالی ایجاد میکنیم که Spring Security را پیاده سازی می کند و بدون استفاده از xml پیکربندی می کند. این مثال مراحل زیر را شامل می شود.
مرحله 1
مرحله اول ایجاد Spring Security با پیکربندی جاوا است. یک پیکربندی جاوا اولیه ساده در زیر داده شده است.
WebSecurityConfig.java
package com.javatpoint;
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.User;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.provisioning.InMemoryUserDetailsManager;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@EnableWebSecurity
@ComponentScan("com.javatpoint")
public class WebSecurityConfig implements WebMvcConfigurer {
@Bean
public UserDetailsService userDetailsService() throws Exception {
InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager();
manager.createUser(User.withDefaultPasswordEncoder().username("javatpoint").
password("java123").roles("USER").build());
return manager;
}
protected void configure(HttpSecurity http) throws Exception {
http
.antMatcher("/")
.authorizeRequests()
.anyRequest().hasRole("ADMIN")
.and()
.httpBasic();
}
}
این پیکربندی یک فیلتر servlet (Servlet Filter) شناخته شده با عنوان springSecurityFilterChain ایجاد می کند و وظایف آن عبارتند از : محافظت از URL های برنامه، اعتبار سنجی نام کاربری و کلمه عبور فرستاده شده، ارجاع به فرم ورود و غیره.
پیکربندی جاوا ارائه شده در بالا، اقدامات زیر را برای برنامه ما انجام می دهد :
- احراز هویت مورد نیاز برای هر URL
- ایجاد فرم ورود
- امکان احراز هویت کاربر با استفاده از احراز هویت مبتنی بر فرم
- امکان خروج
- جلوگیری از حمله CSRF
- ادغام Header در Security (Security Header Integration) و غیره
مرحله 2
حال، springSecurityFilterChain را با war ثبت می کنیم. Spring Security برای ثبت یک کلاس پایه ،AbstractSecurityWebApplicationInitializer را ارائه می دهد که نیاز به توسعه آن داریم. برای برنامه های کاربردی MVC Spring، SecurityWebApplicationInitializer به صورت زیر است.
SecurityWebApplicationInitializer.java
package com.javatpoint;
import org.springframework.security.web.context.*;
public class SecurityWebApplicationInitializer
extends AbstractSecurityWebApplicationInitializer {
}
این کد springSecurityFilterChain را برای همه URL های برنامه ما ثبت می کند.
مرحله 3
حال، WebSecurityConfig را در ApplicationInitializer موجود بارگذاری کنید و به متد getRootConfigClasses() اضافه کنید.
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[] { "/" };
}
}
مرحله 4
کلاس WebSecurityConfigurerAdapter یک متد پیکربندی (HttpSecurity http) ارائه می کند که پیکربندی پیش فرض زیر را دربردارد. تعریف پیش فرض به صورت زیر است.
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.anyRequest().authenticated()
.and()
.formLogin()
.and()
.httpBasic();
}
مشابه XML داده شده است.
< http> < intercept-url pattern="/**" access="authenticated" /> < form-login /> < http-basic /> < /http>
این متد اقدامات زیر را انجام می دهد :
- این تضمین را می دهد که با هر درخواست ایجاد شده توسط کاربر، کاربر را ملزم به احراز هویت کند.
- این امکان را به کاربر می دهد که با استفاده از ورود مبتنی بر فرم، احراز هویت کند.
- این امکان را به کاربر می دهد که با احراز هویت پایه http احراز هویت کند.
مرحله 5
ایجاد یک کنترلر برای مدیریت درخواست های کاربر.
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";
}
}
یک صفحه منظر (view page) به نام index.jsp داریم که دربردارنده سورس کد زیر است.
< html> < head> < meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> < title>Home Page< /title> < /head> < body> Welcome to home page! < /body> < /html>
پروژه تکمیل شده به شکل زیر خواهد بود.
خروجی :
ما یک عمل در کنترلر داریم که تنها توسط کاربر معتبر قابل دسترسی است. بنابراین، وقتی برنامه را اجرا کنیم، برای مدارک ورود درخواست می دهد. خروجی به صورت زیر است.
این صفحه ورود پیش فرض ارائه شده توسط Spring Security است، ما آن را ایجاد نکرده ایم. اگرچه می توانیم صفحه ورود خود را ایجاد کنیم و با برنامه ترکیب کنیم. در مباحث بعدی این کار را خواهیم کرد. حال، مدارک ورود برای ورود به منابع برنامه را ارائه کنید. Spring Securityمدارک کاربر را اعتبار سنجی می کند و از اعتبار کاربر اطمینان حاصل می کند.
ببینیم اگر اطلاعات غلط وارد کنیم چه اتفاقی می افتد.
پس از انتخاب گزینه login پیام خطای اطلاعات اشتباه (Bad Credentials) را می دهد.
حال با اطلاعات صحیح وارد شوید.
این بار اطلاعات مطابقت دارد و صفحه خانه (home page) نمایش داده می شود (index.jsp).