English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
يقدم Spring Security علامات خاصة به لصفحات JSP. هذه العلامات تستخدم لوصول إلى معلومات الأمان في JSP وتطبيق القيود الأمنية.
تستخدم هذه العلامات لحماية طبقة العرض للتطبيق.
علامة الترخيص علامة التحقق من الهوية علامة Accesscontrollist Csrfinput علامة علامة CsrfMetaTags
هذا العلامة يستخدم لغرض الترخيص. يقييم هذا العلامة ويحقق في ما إذا كان الطلب قد تم ترخيصه.
استخدم هذا العلامة اثنين من الخاصيات access و عنوان URL لتحقق من الترخيص للطلب. يمكننا تقييم هذا العلامة من خلال دور المستخدم.
فقط عندما تكون الخاصية مستوفيًا، سيتم عرض المحتوى داخل هذا العلامة. على سبيل المثال.
<sec:authorize access="hasRole('ADMIN')"> سيقوم بعرض المستخدم فقط إذا كان مديرًا </sec:authorize>
هذا العلامة يستخدم لوصول إلى الهوية المصرح بها في سياق الأمان. إذا كان Authentication هو مثيل لـ UserDetails، فيمكن استخدامه للحصول على تفاصيل المستخدم الحالي. على سبيل المثال.
<sec:authentication property="principal.username">
يستخدم هذا العلامة مع وحدة Spring Security ACL. إنه يتحقق من قائمة الأذونات المطلوبة للمجال المحدد. سيتم تنفيذ العلامة فقط إذا كان المستخدم الحالي يمتلك جميع الأذونات. على سبيل المثال.
<sec:accesscontrollist hasPermission="1,2" domainObject="${someObject}"> إذا كان المستخدم يمتلك جميع الأذونات الممثلة بالقيم "1" أو "2" على العنصر المحدد. </sec:accesscontrollist>
استخدم هذه العلامة لإنشاء CSRF token في نماذج HTML. تأكد من تم تمكين حماية CSRF قبل استخدامها. يجب أن نضع هذه العلامة في لإنشاء CSRF token داخل العلامة. على سبيل المثال.
<form method="post" action="/some/action"> <sec:csrfInput /> الاسم:<br /> <input type="text" name="username" /> ... </form>
إنها تضيف علامة meta تحتوي على بيانات CSRF token، وحقول النموذج، وأسماء الرؤوس، وقيمة CSRF token. هذه القيم مفيدة جدًا في إعداد CSRF token في JavaScript في التطبيق.
يجب أن تكون العلامة في داخل علامات HTML.
لتنفيذ أي من هذه العلامات، يجب أن نكون لدينا jar ملف spring security taglib في التطبيق. يمكن أيضًا إضافة هذا الاعتماد Maven التالي.
</dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-taglibs</artifactId> <version>5.0.4.RELEASE</version> </dependency>
في صفحة JSP، يمكننا استخدام البيانات التالية لاستخدام taglib.
<%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags" %>
الآن، دعونا نرى مثالاً على تنفيذ هذه العلامات في مشروع Maven Spring Security.
نحن نستخدم STS (Spring Tools Suite) لإنشاء المشاريع. انظر إلى المثال.
انقر إتمام > زر، سيقوم بإنشاء مشروع Maven كما يلي:
لإعداد Spring Security في تطبيق Spring MVC، يرجى وضع الملفات التالية في في com.w3codeboxالمجلد.
AppConfig.java
بكيتاج com.w3codebox; 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.w3codebox.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; } }
AppConfig用于设置视图文件的视图位置后缀。
//MvcWebApplicationInitializer.java
بكيتاج com.w3codebox; إدخال org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer; فئة عامة MvcWebApplicationInitializer يتخطى AbstractAnnotationConfigDispatcherServletInitializer { @Override محمية Class<?>[] getRootConfigClasses() { الرجوع لـ new Class[] { WebSecurityConfig.class }; } @Override محمية Class<?>[] getServletConfigClasses() { // TOdo Auto-generated method stub الرجوع لـ null; } @Override محمية String[] getServletMappings() { الرجوع الجديد لـ new String[] { "/" }; } }
يستخدم هذا الفئة لت�始化 مسار البرمجيات (servlet dispatcher).
//SecurityWebApplicationInitializer.java
بكيتاج com.w3codebox; إدخال org.springframework.security.web.context.*; فئة عامة SecurityWebApplicationInitializer يتخطى AbstractSecurityWebApplicationInitializer { }
إنشاء فئة واحدة لإنشاء المستخدمين وتطبيق التحقق من الهوية وتحديد الصلاحيات في قابلية الوصول للمستخدم.
//WebSecurityConfig.java
بكيتاج com.w3codebox; إدخال org.springframework.context.annotation.*; إدخال org.springframework.security.config.annotation.web.builders.HttpSecurity; إدخال org.springframework.security.config.annotation.web.configuration.*; import org.springframework.security.core.userdetails.*; import org.springframework.security.core.userdetails.User.UserBuilder; import org.springframework.security.provisioning.InMemoryUserDetailsManager; import org.springframework.security.web.util.matcher.AntPathRequestMatcher; @EnableWebSecurity @ComponentScan("com.w3codebox") public class WebSecurityConfig extends WebSecurityConfigurerAdapter { @Bean public UserDetailsService userDetailsService() { // ensure the passwords are encoded properly UserBuilder users = User.withDefaultPasswordEncoder(); InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager(); manager.createUser(users.username("mohan").password("1mohan23").roles("USER").build()); manager.createUser(users.username("admin").password("admin123").roles("ADMIN").build()); return manager; } @Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests(). antMatchers("/index","/").permitAll() .antMatchers("/admin","/user").authenticated() .and(); .formLogin(); .and(); .logout(); .logoutRequestMatcher(new AntPathRequestMatcher("/logout")); } }
الآن، قم بإنشاء ملف تحكم لمعالجة الطلبات وإصدار الاستجابات.
//HomeController.java
package com.w3codebox.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="/user", method=RequestMethod.GET) public String user() { return "admin"; } @RequestMapping(value="/admin", method=RequestMethod.GET) public String admin() { return "admin"; } }
أنشئ ملفات عرض (jsp) لعرض الخروج على المستخدم. لقد أنشأنا ثلاثة ملفات JSP، يرجى الرجوع إلى ما يلي.
//index.jsp
<html> <head> <title>صفحة البداية</title> </head> <body> <a href="user">مستخدم</a> <a href="admin">إدارة</a> <br> <br> مرحبًا بكم في w3codebox! </body> </html>
//user.jsp
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>صفحة البداية</title> </head> <body> مرحبًا بكم في صفحة المستخدم! </body> </html>
//admin.jsp
في صفحة الإدارة، استخدمنا علامة authorize، التي يتم تقييمها فقط عند استيفاء دور محدد.
<%@ taglib uri="http://www.springframework.org/security/tags" prefix="security" %><html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>صفحة البداية</title> </head> <body> مرحبًا بك في صفحة الإدارة! <a href="logout">logout</a> <br><br> <security:authorize access="hasRole('ADMIN')"> مرحبًا ADMIN </security:authorize> <security:csrfInput/> </body> </html>
مشروعنا يحتوي على التبعيات التالية المطلوبة لبناء التطبيق.
//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.w3codebox</groupId> <artifactId>springtaglibrary</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-taglibs --> </dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-taglibs</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> <!-- https://mvnrepository.com/artifact/org.springframework/spring-framework-bom --> </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>
بعد إضافة جميع هذه الملفات، سيبدو مشروعنا كما يلي:
انقر بزر الماوس الأيمن على المشروع، ثم اختر تشغيل على الخادميظهر للمتصفح النتيجة التالية.
بمقابل تقديم AppSecurityConfig الاعتمادات المحددة في الملف، انقر على المستخدم والولوج.
بعد الولوج بنجاح، سيتم عرض الصفحة الإدارية التالية. يرجى ملاحظة أن لم يتم عرض المحتوى الموجود داخل علامة authorize بسبب أن المستخدم لديه دور USER.
الخروج، الآن عبر تقديم معلومات الولوج كـ admin للاولوج.
بعد الولوج كمستخدم admin، يرجى مراجعة هذا التغريدة authorize للاختبار، وعرض النتيجة التالية.