EN

Search
Close this search box.

موستانگ، وحشیِ دوست داشتنی

1 رای
در پاسخ به: Meta Annotation در Spring

زمانیکه یک یوزر و یا نقش  داشته باشیم و  بخواهیم در متدهای مختلف و به دفعات از آن استفاده کنیم می توانیم یک Meta Annotation  تعریف کنیم و یوزر و نقش آن را در آن تعریف کنیم.

@Retention(RetentionPolicy.RUNTIME)
@WithMockUser(value = "john", roles = "VIEWER")
public @interface WithMockJohnViewer { }

سپس در تست های خود  از WithMockJohnViewer استفاده می کنیم.

@Test
@WithMockJohnViewer
public void givenMockedJohnViewer_whenCallGetUsername_thenReturnUsername() {
    String userName = userRoleService.getUsername();

    assertEquals("john", userName);
}
0 رای
در پاسخ به: WithMockUser@ در Spring

برای تست امنیت در سطح متد در Sppring از انوتیشن WithMockUser@  استفاده می  کنیم.با استفاده از این انوتیشن می توانیم متد خود را با یک یوزر تست کنیم بدون آنکه آن یوزر واقعا وجود داشته باشد.

@Test
@WithMockUser
public void login() {
...
}

در این انوتیشن یوزر برابر User  و  پسورد برابر password و نقش آن ROLE_USER می باشد.

درصورتیکه بخواهیم می توانیم یوزر و نقش آن را مشخص کنیم.

@Test
@WithMockUser(username="admin",roles={"USER","ADMIN"})
public void login() {
	...
}
0 رای

امنیت در spring به ما این امکان را می دهد که در یک متد چندین انوتیشن امنیت قرار دهیم.مثلا می توانیم یک امنیت برای قبل از اجرای متد و یک امنیت برای بعد از اجرای متد قرار  دهیم.

@PreAuthorize("#username == authentication.principal.username")
@PostAuthorize("returnObject.username == authentication.principal.nickName")
public CustomUser securedLoadUserDetail(String username) {
//...
}
0 رای
در پاسخ به: useEffect در React

useEffect   یک hook در ریکت  می باشد و جایگزین component lifecycle  های ریکت می باشد.این hook برای مواقعی است که تغییری در یک ویژگی یا هر  چیز دیگر در برنامه رخ دهد. useEffect  ترکیب  دو کامپوننت componentDidMount و componentDidUpdate  می باشد.

در مثال زیر هر زمانیکه متغیر  user تغییر کند متد fetchUsers اجرا می شود

useEffect( () => { fetchUsers(users) }, [ users ] );

درصورتیکه آرگومان دوم را پاس ندهیم  useEffect  همیشه اجرا می شود.

useEffect( () => { fetchUsers(users) } );
0 رای
در پاسخ به: Hooks در React

Hooks  یک قابلیت جدید در ریکت 16.8 می باشد. با استفاده از Hooks می توانیم از state و سایر ویژگی های ریکت بدون نوشتن کلاس استفاده کنیم.در واقع به جای نوشتن  کلاس از متد (function) استفاده می کنیم و کدنویسی کمتری نیاز  هست .در زیر یک مثال با استفاده از کلاس نشان داده شده است

class Appp extends React.Component {
  constructor(props) {
    super(props);
    this.state = {count: 0};
  }
  render() {
    return (
      <div>
	<button onClick={()=>this.setState({count : this.state.count+1})}>
	click me
	</button>
      </div>
    );
  }
}

در مثال زیر از یک Hooks  به نام useState استفاده شده است.

import React , {useState} from 'react';

function App(){

	const[ count , setCount]=useState((0);

	return (
	<div>
		<buttoon onclick={()=> setCount(count +1)}>
		</buttonn>
	</div>
);
}

useState فقط یک آرگومان دارد که در آن مقدار اولیه  state را به آن می دهیم.

همانطور که می بینیم در مثال بالا از کلاس استفاده نشده و از function استفاده شده است.با استفاده از  setCount میتوانیم count را مقداردهی  کنیم.

0 رای

درصورتیکه یک انوتیشن امنیت داشته باشیم که بخواهیم برای همه متدهای کلاس اعمال شود می توانیم آن را در  سطح کلاس قرار دهیم.در این صورت آن امنیت برای همه متدهای آن کلاس اعمال می شود.

@Service
@PreAuthorize("hasRole('ROLE_ADMIN')")
public class SystemService {

    public String getSystemYear(){
        //...
    }
 
    public String getSystemDate(){
        //...
    }
}

در مثال بالا برای اجرای همه متدها باید کاربر نقش ROLE_ADMIN را داشته باشد.

0 رای

درصورتیکه یک انوتیشن امنیت داشته باشیم که بخواهیم برای همه متدهای کلاس اعمال شود می توانیم آن را در  سطح کلاس قرار دهیم.در این صورت آن امنیت برای همه متدهای آن کلاس اعمال می شود.

@Service
@PreAuthorize("hasRole('ROLE_ADMIN')")
public class SystemService {

    public String getSystemYear(){
        //...
    }
 
    public String getSystemDate(){
        //...
    }
}

در مثال بالا برای اجرای همه متدها باید کاربر نقش ROLE_ADMIN را داشته باشد.

0 رای

انوتیشن PostFilter@  یکی از کنترل های در سطح متد در Spring Security می باشد.این انوتیشن لیست یا آرایه خروجی یک متد را فیلتر می کند.در  مثال زیر لیست برگردانده شده توسط متد بررسی می شود و در صورتیکه username ای در لیست با یوزر جاری برابر باشد از لیست حذف می شود.

@PostFilter("filterObject != authentication.principal.username")
public List<String> getAllUsernamesExceptCurrent() {
//...
}

عناصر لیست خروجی متد توسط filterObject قابل دسترسی می باشند.

0 رای

انوتیشن PreFilter@ یکی از انوتیشن  های Spring Security  در سطح متد می باشد.ابن انوتیشن لیست یا آرایه ورودی یک متد را قبل از اجرای متد فیلتر می کند.در مثال زیر قبل از  اجرای متد یوزر چک می شود و در صورتیکه عنصر فعلی لیست برابر با کاربر جاری باشد متد اجرا نمی شود.

@PreFilter("filterObject != authentication.principal.username")
public String joinUsernames(List<String> usernames) {
    //...
}

عناصر لیست با استفاده  از  filterObject  قابل دستیابی می باشند.

در صورتیکه متد چند ورودی داشته باشد با استفاده از filterTarget آرگومان ورودی مورد نظر خود که می خواهیم فیلتر روی آن انجام شود را مشخص می کنیم.

@PreFilter
  (value = "filterObject != authentication.principal.username",
  filterTarget = "usernames")
public String joinUsernamesAndRoles(
  List<String> usernames, List<String> roles) {
 
    //...
}

 

0 رای

انوتیشن PostAuthorize@ در Spring برای قرار کنترل ها در سطح متد می باشد.این انوتیشن کنترل تعریف شده را بعد از اجرای  متد بررسی  می کند و در صورتیکه نیاز باشد از برگرداندن خروجی متد جلوگیری می کند.در مثال زیر getUser در صورتی  آبجکت user را برمی گرداند که   userId در  آبجکت user  متد  با userId  کاربر جاری برابر باشد.

@PostAuthorize("returnObject.userId == principal.userId")
public User getUser(@PathVariable String id) {
//...
}

در این انوتیشن آبجکتی که توسط متد برگردانده می شود از طریق returnObject قابل دستیابی می باشد و    principal.user  یوزرآدی مربوط به کاربر جاری می باشد.


            
1 رای

انوتیشن PreAuthorize@ در Spring کنترل دسترسی expression-based می باشد.این انوتیشن قبل از اجرای متد عبارت داده شده را بررسی می کند و سپس در صورت برقرار بودن عبارت متد را اجرا می کند.مثلا در  مثال زیر قبل از اجرای متد بررسی می  کند که در صورتیکه کاربر نقش  ROLE_ADMIN را دارد  متد  getUsername اجرا شود

@PreAuthorize("hasRole("ROLE_ADMIN")(
public String getUsername() {
	//...
}

می توانیم چند نقش معرفی کنیم

@PreAuthorize("hasRole('ROLE_VIEWER') or hasRole('ROLE_EDITOR')")
public boolean isValidUsername(String username) {
    //....
}
0 رای

برای redirect کردن به صفحات دیگر در جاوا اسکریپت از دستورات زیر استفاده می کنیم.

window.location.href = "https://mustang.ir/questions";

و یا

window.location.replace("https://mustang.ir/questions");
0 رای

انوتیشن RoleAllowed@ در spring مشابه Secured@  برای تعیین سطح دسترسی اجرای متدها می باشد.مثلا در مثال زیر کاربرانی که نقش ROLE_ADMIN دارند می تواند متد getUsername را فراخوانی کنند.

@Secured("ROLE_ADMIN")
public String getUsername() {
	//...
}

همچنین می توانیم مجموعه ای از نقش ها را به صورت زیر تعریف کنیم.

@Secured({ "ROLE_ADMIN", "ROLE_CUSTOMER" })
public boolean isValidUsername(String username) {
    //....
}
0 رای

انوتیشن Secured@  یکی از انوتیشن های مربوط به امنیت در  اسپرینگ می  باشد.این انتوتیشن سطح دسترسی کاربران به یک متد را مشخص می کند.مثلا در مثال زیر کاربرانی که نقش ROLE_ADMIN دارند می تواند متد getUsername را فراخوانی کنند.

@Secured("ROLE_ADMIN")
public String getUsername() {
	//...
}

همچنین می توانیم مجموعه ای از نقش ها را به صورت زیر تعریف کنیم.

@Secured({ "ROLE_ADMIN", "ROLE_CUSTOMER" })
public boolean isValidUsername(String username) {
    //....
}

در مثال بالا کاربرانی که یکی از نقش های ROLE_ADMIN  و یا ROLE_CUSTOMER  را داشته باشند می توانند به متد isValidUsername  دسترسی داشته باشند. 

0 رای
در پاسخ به: تنظیمات Spring Security

برای استفاده از Spring Security در برنامه خود باید تگ زیر را در  فایل maven خود تعریف کنیم.

<dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-config</artifactId>
</dependency>
0 رای

فایل struts-config.xml در struts را در فایل web.xml  در تگ servlet تعریف می کنیم.

<servlet>
		<servlet-name>action</servlet-name>
		<servlet-class>
			org.apache.struts.action.ActionServlet
		</servlet-class>
		<init-param>
			<param-name>config</param-name>
                <param-value>/WEB-INF/struts/struts-config.xml</param-value>
		</init-param>
		
	</servlet>
0 رای
در پاسخ به: JSON در Pandas

داده های بزرگ معمولا در فایل JSON ذخیره می شوند. برای خواندن فایل JSON در پایتون از متد read_json استفاده  می کنیم.

import pandas as pd

df = pd.read_json('data.json')
0 رای
در پاسخ به: الگوی طراحی Decorator

الگوی طراحی Decorator  برای اضافه کردن ویژگی ها و قابلیت های جدید به یک آبجکت در زمان  اجرا می باشد.این الگو با استفاده از اینترفیس و پیاده سازی آن انجام می شود. در مثال زیر یک نمونه از این الگو را پیاده سازی می کنیم

ابتدا یک اینترفیس تعریف می کنیم.

public interface Shape {
   void draw();
}

سپس دو پیاده سازی  برای آن تعریف می کنیم.

public class Rectangle implements Shape {

   @Override
   public void draw() {
      System.out.println("Shape: Rectangle");
   }
}

public class Circle implements Shape {

   @Override
   public void draw() {
      System.out.println("Shape: Circle");
   }
}

سپس یک اینترفیس  decorator تعریف می کنیم

public abstract class ShapeDecorator implements Shape {
   protected Shape decoratedShape;

   public ShapeDecorator(Shape decoratedShape){
      this.decoratedShape = decoratedShape;
   }

   public void draw(){
      decoratedShape.draw();
   }	
}

یک پیاده سازی برای این decorator تعریف می کنیم.

public class RedShapeDecorator extends ShapeDecorator {

   public RedShapeDecorator(Shape decoratedShape) {
      super(decoratedShape);		
   }

   @Override
   public void draw() {
      decoratedShape.draw();	       
      setRedBorder(decoratedShape);
   }

   private void setRedBorder(Shape decoratedShape){
      System.out.println("Border Color: Red");
   }
}

از آنجایی که در کلاس ShapeDecorator یک آبجکت از کلاس Shape می گیرد می توانیم هر نوع کلاس زیرمجموعه ای از کلاس Shape  را  به آن بدهیم و بنابراین هر آبجکت از کلاس RedShapeDecorator می تواند ویژگی های متفاوتی داشته باشد.

در مثال زیر دو آبجکت از کلاس  RedShapeDecorator ایجاد کردیم که هر کدام قابلیتهای متفاوتی دارند.

public class DecoratorPatternDemo {
   public static void main(String[] args) {

      Shape circle = new Circle();

      Shape redCircle = new RedShapeDecorator(new Circle());

      Shape redRectangle = new RedShapeDecorator(new Rectangle());
      System.out.println("Circle with normal border");
      circle.draw();

      System.out.println("\nCircle of red border");
      redCircle.draw();

      System.out.println("\nRectangle of red border");
      redRectangle.draw();
   }
}
0 رای
در پاسخ به: Pandas در پایتون

Pandas یک کتابخانه در  پایتون برای کار با مجموعه داده ها می باشد.با استفاده از این کتابخانه می  توانیم داده های کلان(big  data) را آنالیز کنیم.همچنین این کتابخانه می تواند مجموعه داده های آشفته را مرتب و خوانا کند که در داده کاوی بسیار مهم می باشد.و همچنین مقادیر مینیمم و ماکسیمم و یا میانیگین را در یک مجموعه پیدا کند. برای  نصب این کتابخانه باید دستور زیر را اجرا کنیم

C:\Users\username>pip install pandas

سپس آن را در برنامه تعریف  می کنیم.

import pandas
0 رای

الحاق دو لیست در پایتون به سادگی با عملگر + انجام می شود.

list1 = ["a", "b", "c"]
list2 = [1, 2, 3]

list3 = list1 + list2

یک روش دیگر استفاده از متد append می باشد.به این صورت که اعضای یکی از لیستها را به لیست دیگر الحاق کنیم.

list1 = ["a", "b" , "c"]
list2 = [1, 2, 3]

for x in list2:
  list1.append(x)
نمایش 41 - 60 از 217 نتیجه