日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

Spring4实战学习笔记

發布時間:2023/11/27 生活经验 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring4实战学习笔记 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

《Spring4實戰 第4版》2016年4月新出版的,之前的第三版看起來還是不錯的,所以看到新版就直接買下來。

英文版源碼地址:Spring in Action, Fourth Edition Covers Spring 4

?

1.IOC裝配Bean

參考【Spring實戰4?2.2】,作者提倡無XML配置化。

1.1接口只有一個現實類

可以自動裝配

?

public interface CompactDisc {void play();
}

?

?

import org.springframework.stereotype.Component;@Component
public class SgtPeppers implements CompactDisc {private String title = "Sgt. Pepper's Lonely Hearts Club Band";private String artist = "http://blog.csdn.net/unix21";public void play() {System.out.println("【非常醒目SgtPeppers 】>>>>>>>>>>>>>>>>>Playing " + title + " by " + artist);}}

?

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;@Configuration
@ComponentScan
public class CDPlayerConfig { 
}

?

單元測試

import static org.junit.Assert.*;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = CDPlayerConfig.class)
public class CDPlayerTest {@Autowiredprivate CompactDisc cd;@Testpublic void play() {cd.play();}
}





1.2 接口有多個實現類

【參考?Spring實戰4?3.3】
故意再寫一個實現類

?

import org.springframework.stereotype.Component;@Component
public class SgtPeppersNew implements CompactDisc {private String title = "Sgt. Pepper's Lonely Hearts Club Band";private String artist = "http://blog.csdn.net/unix21";public void play() {System.out.println("【非常醒目 SgtPeppersNew】>>>>>>>>>>>>>>>>>Playing " + title + " by " + artist);}}

?

如果這個時候運行肯定會報錯NoUniqueBeanDefinitionException: No qualifying bean of type

?

?

解決方法有兩種

第一種 在實現類上 標識首選的bean,使用@Primary

?

import org.springframework.context.annotation.Primary;
import org.springframework.stereotype.Component;@Component
@Primary
public class SgtPeppers implements CompactDisc {private String title = "Sgt. Pepper's Lonely Hearts Club Band";private String artist = "http://blog.csdn.net/unix21";public void play() {System.out.println("【非常醒目SgtPeppers 】>>>>>>>>>>>>>>>>>Playing " + title + " by " + artist);}}

?

?

但是這種方法不方便精確定義。


第二種 ?使用@Qualifier注解

?

import static org.junit.Assert.*;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = CDPlayerConfig.class)
public class CDPlayerTest {@Autowired@Qualifier("sgtPeppersNew") private CompactDisc cd;@Testpublic void play() {cd.play();}
}

?

?

需要注意的是bean id的首字母是類名小寫。

spring @Qualifier注解

?

1.3 為組件掃描的bean命名

【參考?Spring實戰4??2.2.2】

?

import org.springframework.stereotype.Component;@Component("spn")
public class SgtPeppersNew implements CompactDisc {

?

@Autowired@Qualifier("spn") private CompactDisc cd;


也可以使用@Named效果是一樣的,這是java依賴注入規范

?

?

import javax.inject.Named;@Named("spn")
public class SgtPeppersNew implements CompactDisc {

?

1.4 設定組件掃描的指定包

?

【參考?Spring實戰4??2.2.3】

如果@ComponentScan默認不設置只掃描配置類所在的包作為基礎包。

?

@Configuration
@ComponentScan("blog.csdn.net.unix21")
public class CDPlayerConfigTest {

設置@ComponentScan的value屬性就可以指明包名稱。

?

?

如果想更清晰的表明設置的是基礎包
@ComponentScan(basePackages="指定包")

?

指定多個

@ComponentScan(basePackages={"指定包1","指定包2"})

?

也可以將其指定為包中所包含的類或者接口

@ComponentScan(basePackages={"XXX.class","XX.class"})

?

1.5 自動裝配

【參考?Spring實戰4??2.2.4】

聲明自動裝配需要@Autowired注解

?

1.5.1 在構造方法上使用自動裝配

?

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = CDPlayerConfigTest.class)
public class CDPlayerFunTest {private CompactDisc cd;@Autowired@Qualifier("spn")public void CDPlayer(CompactDisc cd) {this.cd = cd;}@Testpublic void play() {cd.play();System.out.println("【占位符】CDPlayerFunTest");}
}

?

?

?

另一種寫法

?

@Component
public class CDPlayer implements MediaPlayer {private CompactDisc cd;@Autowiredpublic CDPlayer(@Qualifier("spn")CompactDisc cd) {this.cd = cd;}public void play() {cd.play();}}

?

?

?

1.5.2 在屬性Setter方法上使用自動裝配

?

@Component
public class CDPlayer implements MediaPlayer {private CompactDisc cd;@Autowired@Qualifier("spn")public void setCompactDisc(CompactDisc cd) {this.cd = cd;}public void play() {cd.play();}
}


避免異常聲明? @Autowired(required = false),如果沒有匹配的bean,Spring會讓這個bean處于未裝配轉態,但是需要謹慎對待這個設置,代碼需要做null檢查。

?

?

@Autowired是Spring特有的注解,可以替換為@Inject,@Inject來源自Jave依賴注入規范。

?

1.6 創建自定義的限定符

【參考?Spring實戰4??3.3.2】

?

@Component
@Qualifier("cold")
public class IceCream implements CompactDisc {private String title = "Sgt. Pepper's Lonely Hearts Club Band";private String artist = "The Beatles";public void play() {System.out.println("【非常醒目 IceCream】>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>Playing " + title + " by " + artist);}
}

?

?

測試用例

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes=CDPlayerConfigTest.class)
public class CDPlayerLogTest {@Autowiredprivate MediaPlayer player;@Autowired@Qualifier("sp")private CompactDisc cd;@Autowired@Qualifier("cold")private CompactDisc cd2;@Testpublic void cdShouldNotBeNull() {assertNotNull(cd);}@Testpublic void play() {player.play();cd.play();cd2.play();}
}

?

?

?

好處:這樣做的好處限定符不耦合類名,所以可以隨意重構類名。

問題:重復的限定符出現在多個類上這是不允許的,因為Java不允許同一個條目上重復出現相同類型的多個注解

?

1.7 使用自定義限定符注解

針對上述問題可以創建自定義的限定符注解。

?

@Retention(RetentionPolicy.RUNTIME) // 注解會在class字節碼文件中存在,在運行時可以通過反射獲取到  
@Target({ElementType.CONSTRUCTOR,ElementType.FIELD,ElementType.METHOD,ElementType.TYPE})//定義注解的作用目標**作用范圍字段、枚舉的常量/方法  
@Qualifier
public @interface Cold {}

?

@Retention(RetentionPolicy.RUNTIME) // 注解會在class字節碼文件中存在,在運行時可以通過反射獲取到  
@Target({ElementType.CONSTRUCTOR,ElementType.FIELD,ElementType.METHOD,ElementType.TYPE})//定義注解的作用目標**作用范圍字段、枚舉的常量/方法  
@Qualifier
public @interface Creamy {}

?

@Retention(RetentionPolicy.RUNTIME) // 注解會在class字節碼文件中存在,在運行時可以通過反射獲取到  
@Target({ElementType.CONSTRUCTOR,ElementType.FIELD,ElementType.METHOD,ElementType.TYPE})//定義注解的作用目標**作用范圍字段、枚舉的常量/方法  
@Qualifier
public @interface Fruity {}

?

@Component
@Cold
@Creamy
public class IceCream implements CompactDisc {private String title = "Spring 實現 第4版 讀書筆記";private String artist = "http://blog.csdn.net/unix21";public void play() {System.out.println("【非常醒目 IceCream】>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>Playing " + title + " by " + artist);}
}

?

@Component
@Cold
@Fruity
public class Popsicle implements CompactDisc {private String title = "Spring 實現 第4版 讀書筆記";private String artist = "http://blog.csdn.net/unix21";public void play() {System.out.println("【非常醒目 Popsicle】>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>Playing " + title + " by " + artist);}
}

?

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = CDPlayerConfigTest.class)
public class CDPlayerLogTest {@Autowiredprivate MediaPlayer player;@Autowired@Qualifier("sp")private CompactDisc cd;@Autowired@Cold@Creamyprivate CompactDisc cd2;@Autowired@Cold@Fruityprivate CompactDisc cd3;@Testpublic void cdShouldNotBeNull() {assertNotNull(cd);}@Testpublic void play() {player.play();cd.play();cd2.play();cd3.play();}
}

?

?

?

1.8 bean的作用域

Spring定義了多重作用域,singleton單例,prototype原型等

參考:spring中scope作用域

singleton單例:整個應用中,只創建bean的一個實例,默認Spring上下文中所有的bean都是單例。

prototype原型:每次注入或者通過Spring應用上下文獲取的時候,都會創建一個新的bean實例。

?

@Component
public class Add implements AddI {public  int a=0;public  void Add() {a++;}public  void getA() {System.out.println("【非常醒目 Add】>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>a= " +a+"");}
}

?

public interface AddI {
void Add();void getA();
}

?

@Component
public class CDPlayer implements MediaPlayer {@Autowired@Qualifier("sp")private CompactDisc cd;@Autowiredprivate AddI a;public void play() {System.out.println("【非常醒目 CDPlayer】>>>");cd.play();a.Add();a.getA();a.Add();a.getA();System.out.println("【非常醒目 CDPlayer】<<<");}
}

?

?

測試用例

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = CDPlayerConfigTest.class)
public class CDPlayerLogTest {@Autowiredprivate MediaPlayer player;@Autowired@Qualifier("sp")private CompactDisc cd;@Autowired@Cold@Creamyprivate CompactDisc cd2;@Autowired@Cold@Fruityprivate CompactDisc cd3;@Testpublic void cdShouldNotBeNull() {assertNotNull(cd);}@Autowiredprivate AddI a;@Testpublic void play() {player.play();cd.play();cd2.play();cd3.play();a.getA();}
}

?

?

?

再寫一個多線程

?

public class ClientThread extends Thread {@Autowiredprivate AddI a;@Autowiredpublic ClientThread(AddI a) {this.a = a;}public void run() {a.Add();a.getA();}
}


調用多線程

?

?

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = CDPlayerConfigTest.class)
public class SpringScopeTest {@Autowiredprivate AddI a;@Testpublic void Scope() {for (int i = 0; i < 10; i++) {ClientThread t = new ClientThread(a);t.start();}}
}


?

改為SCOPE_PROTOTYPE

?

?

@Component
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
//@Scope(ConfigurableBeanFactory.SCOPE_SINGLETON)
public class Add implements AddI {public  int a=0;public  void Add() {a++;}public  void getA() {System.out.println("【非常醒目 Add】>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>a= " +a+"");}
}


?

?

?

看到差異了吧。

?

補充說明:@Repository、@Service、@Controller 和 @Component將類標識為Bean,都是一樣的,用在不同的地方而已。

?

2.AOP切面編程

定義接口

?

public interface PerformanceI {public void perform();
}


實現類

?

?

import org.springframework.stereotype.Component;@Component
public class Performance implements PerformanceI{public void perform(){System.out.println("【非常醒目  Performance perform 調用中】 By http://blog.csdn.net/unix21");   }
}


定義切面

?

?

import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;@Aspect
public class MyAspect {@Before("execution(* com.demo.PerformanceI.perform(..))")public void before(){System.out.println("【非常醒目 [方法調用前] 】");}@After("execution(* com.demo.PerformanceI.perform(..))")public void after(){System.out.println("【非常醒目 [方法調用后] 】");}@AfterThrowing("execution(* com.demo.PerformanceI.perform(..))")public void afterThrowing(){System.out.println("【非常醒目 [方法異常后] 】");}
}


配置文件

?

?

import com.demo.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.EnableAspectJAutoProxy;@Configuration
@EnableAspectJAutoProxy
@ComponentScan("com.demo")
public class AppConfig {@Beanpublic MyAspect myAspect() {return new MyAspect();}}

?

?

測試用例

?

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = AppConfig.class)
public class MyTest {@Autowiredprivate PerformanceI p1;@Testpublic void play() {p1.perform();}
}

?

?

運行:

?

實現了方法調用前后的AOP效果。

這個Spring官方參考做的不錯:http://docs.spring.io/spring/docs/4.2.5.RELEASE/javadoc-api/

這里選不同的版本:http://docs.spring.io/spring/docs/

?

3.Spring MVC

DispatcherServlet是Spring MVC的核心,每當應用接受一個HTTP請求,由DispatcherServlet負責將請求分發給應用的其他組件。
在舊版本中,DispatcherServlet之類的servlet一般在web.xml文件中配置;但是Spring 3.1引入了注解就無需再使用web.xml文件。

?

import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;public class SpitterWebInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {@Overrideprotected Class<?>[] getRootConfigClasses() {return new Class<?>[]{RootConfig.class};}@Overrideprotected Class<?>[] getServletConfigClasses() {return new Class<?>[]{WebConfig.class};}@Overrideprotected String[] getServletMappings() {return new String[]{"/"};}}

?

AbstractAnnotationConfigDispatcherServletInitializer這個類負責配置DispatcherServlet、初始化Spring MVC容器和Spring容器。


正如可以通過多種方式配置DispatcherServlet一樣,也可以通過多種方式啟動Spring MVC特性。原來我們一般在xml文件中使用<mvc:annotation-driven>元素啟動注解驅動的Spring MVC特性。這里我們使用JavaConfig配置,最簡單的Spring MVC配置類代碼如下:

?

?

?

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.servlet.view.InternalResourceViewResolver;@Configuration
@EnableWebMvc
@ComponentScan("com.xxx.controller")
public class WebConfig extends WebMvcConfigurerAdapter{@Beanpublic ViewResolver viewResolver() { //配置JSP視圖解析器InternalResourceViewResolver resolver = new InternalResourceViewResolver();resolver.setPrefix("/WEB-INF/views/");resolver.setSuffix(".jsp");//可以在JSP頁面中通過${}訪問beansresolver.setExposeContextBeansAsAttributes(true);return resolver;}@Overridepublic void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {configurer.enable(); //配置靜態文件處理}
}

@Configuration表示這是Java配置類;@EnableWebMvc注解用于啟動Spring MVC特性。
?

通過@ComponentScan注解指定bean的自動發現機制作用的范圍,被@Controller等注解修飾的web的bean將被發現并加載到spring mvc應用容器,這樣就不需要在配置類中顯式定義任何控制器bean了。

通過@Bean注解添加一個ViewResolverbean,具體來說是InternalResourceViewResolver。

?

RootConfig的配置就非常簡單了,唯一需要注意的是,它在設置掃描機制的時候,將之前WebConfig設置過的那個包排除了;也就是說,這兩個掃描機制作用的范圍正交。RootConfig的代碼如下:

?

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.FilterType;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;@Configuration
@ComponentScan(basePackages = {"com.xxx.*"},excludeFilters = {@ComponentScan.Filter(type = FilterType.ANNOTATION, value = EnableWebMvc.class)})
public class RootConfig {
}

?

?

寫一個控制器,定義之前的IOC對象PerformanceI

?

@Controller
public class HomeController {@Autowiredprivate PerformanceI p1;@RequestMapping(value = "/home", method = RequestMethod.GET)public String home() {p1.perform();return "home";}
}

?

?

在WEB-INF/views下新增模板文件home.jsp

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>JSP Page</title></head><body><h1>Spring4 & Sping MVC4 </h1><p>demo by http://blog.csdn.net/unix21</p></body>
</html>


?

?

?

?

?

下面這個是【第5章】的翻譯?https://segmentfault.com/a/1190000004343063?_ea=575820

?

4.Spring4整合MyBatis3

說明:《Spring實戰(第4版)》并沒有提到MyBatis的整合,這個是我自己寫的,寫一起只為查看方便。

新建MybatisConfig文件

?

import javax.sql.DataSource;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.mapper.MapperScannerConfigurer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;@Configuration
@EnableTransactionManagement
public class MybatisConfig {@Beanpublic DataSource dataSource() {DriverManagerDataSource dataSource = new DriverManagerDataSource();dataSource.setUsername("admin");dataSource.setPassword("admin");dataSource.setDriverClassName("com.microsoft.sqlserver.jdbc.SQLServerDriver");//如果其他數據庫換對應的驅動即可dataSource.setUrl("jdbc:sqlserver://blog.csdn.net.unix21:3499;DatabaseName=testdb");return dataSource;}@BeanMapperScannerConfigurer mpperScannnerConfigurer() {MapperScannerConfigurer msc = new MapperScannerConfigurer();msc.setSqlSessionFactoryBeanName("sqlSessionFactory");msc.setBasePackage("com.unix.mapper");//自動掃描mapper包return msc;}@Bean(name = "sqlSessionFactory")SqlSessionFactoryBean sqlSessionFactory(DataSource dataSource) {SqlSessionFactoryBean ssfb = new SqlSessionFactoryBean();ssfb.setDataSource(dataSource);ssfb.setTypeAliasesPackage("com.unix.bean");//自動掃描bean包return ssfb;}@BeanPlatformTransactionManager transactionManager(DataSource dataSource) {DataSourceTransactionManager transactionManager = new DataSourceTransactionManager();transactionManager.setDataSource(dataSource);return transactionManager;}
}


新增一個mapper接口

?

?

public interface  SchoolMapper {@Select("select * from School where id =#{id}")School findById(@Param("id") int id);@Select("select * from School where Name like '${name}%'")List<School> findByName(@Param("name") String name);
}


測試用例

?

?

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = MybatisConfig.class)
//@TransactionConfiguration(defaultRollback=true)
public class SchoolTest {@Autowiredprivate SchoolMapper shoolDao;@Testpublic void findById(){School shool = shoolDao.findById(1);Assert.assertNotNull(shool);System.out.println(shool.getName());       }@Testpublic void findByName(){List<School> result = shoolDao.findByName("蘇州中學");Assert.assertNotNull(result);for (School s : result) {System.out.println(s.getName());}        }
}

?

5.Spring4使用Redis

redis在日常開發中已經成為了標配了,在spring4中使用redis非常簡單,無需自己去寫一個jedis的工廠方法連接池之類的代碼,因為Spring已經寫好了,你只需要引用spring-data-redis包即可

?

<dependency><groupId>org.springframework.data</groupId><artifactId>spring-data-redis</artifactId><version>1.7.1.RELEASE</version></dependency>


Redis配置

?

?

@Configuration
public class RedisConfig {@Beanpublic RedisConnectionFactory redisCF() {JedisConnectionFactory cf = new JedisConnectionFactory();cf.setHostName("127.0.0.1");//服務器IPcf.setPort(6379);//端口cf.setPassword("密碼");return cf;}@Beanpublic RedisTemplate<String, String> redisTemplate(RedisConnectionFactory cf) {RedisTemplate<String, String> redis = new RedisTemplate<String, String>();redis.setConnectionFactory(cf);return redis;}@Beanpublic StringRedisTemplate stringRedisTemplate(RedisConnectionFactory cf) {StringRedisTemplate redis = new StringRedisTemplate();redis.setConnectionFactory(cf);return redis;}
}


測試用例

?

?

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = RedisConfig.class)
public class RedisTest {@Autowiredprivate StringRedisTemplate r1;@Testpublic void get() {String foo=DateUtil.getNowTimeString();r1.opsForValue().set("foo", foo);foo=r1.opsForValue().get("foo");System.out.println("【Redis 測試>>>get set】"+foo+"By http://blog.csdn.net/unix21");}
}

?

?

?

6.Spring Security

?

import org.springframework.security.web.context.AbstractSecurityWebApplicationInitializer;public class SecurityWebInitializer extends AbstractSecurityWebApplicationInitializer {
}

?

@Configuration
@EnableWebMvcSecurity
public class SecuredConfig extends WebSecurityConfigurerAdapter {@Overrideprotected void configure(HttpSecurity http) throws Exception {http.authorizeRequests().anyRequest().authenticated().and().formLogin().and().httpBasic();}}

?

?

這個時候訪問任何頁面都會跳轉到系統自帶的登陸頁面

基于內存的用戶存儲:

?

    //基于內存的用戶@Overrideprotected void configure(AuthenticationManagerBuilder auth) throws Exception {auth.inMemoryAuthentication().withUser("user1").password("pass1").roles("USER").and().withUser("user2").password("pass2").roles("USER","ADMIN");}

?

?

?

故意輸錯用戶名密碼就進不去

?

?

?

?

?

驗證?指定頁面+指定權限

?

    @Overrideprotected void configure(HttpSecurity http) throws Exception {http.authorizeRequests().antMatchers("/news").hasRole("USER").and().formLogin().and().httpBasic();}

?

?

?

?

?

?

?

我們設定/news需要User角色的用戶可以看,其他頁面隨便看

?

我們用user2登陸,由于沒權限返回403

只有用user1登陸才可以看到頁面內容。

?

自定義登陸頁

現實開發中不肯能用Spring提供的簡易登陸頁,除非是一個很小的內部系統。

?

@Configuration
@EnableWebMvcSecurity
public class SecuredConfig extends WebSecurityConfigurerAdapter {@Overrideprotected void configure(HttpSecurity http) throws Exception {http.authorizeRequests().antMatchers("/news/*").hasRole("USER")  .and().formLogin().loginPage("/login").defaultSuccessUrl("/").failureUrl("/login?error").permitAll().and().httpBasic();}


.antMatchers("/news/*").hasRole("USER") ? :匹配 ?/news/以及/news/ 開頭的所有頁面 ?需要USER權限

?

?

?

.loginPage("/login") ? :自定義登陸頁
.defaultSuccessUrl("/") ? :默認成功頁,如果沒有權限則跳轉到該頁面

?.failureUrl("/login?error") ?:默認失敗頁面

?

?

  // 1. /login 登錄頁面的常規顯示// 2. /login?error 登錄驗證失敗的展示// 3. /login?logout 注銷登錄的處理@RequestMapping(value = "/login", method = RequestMethod.GET)public ModelAndView login(@RequestParam(value = "error", required = false) String error,@RequestParam(value = "logout", required = false) String logout) {ModelAndView model = new ModelAndView();if (error != null) {model.addObject("error", "用戶名密碼不對!");}if (logout != null) {model.addObject("msg", "You've been logged out successfully.");}model.setViewName("login");return model;}


login.jsp

?

?

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<html><head><title>登陸</title></head><body onload='document.f.username.focus();'><h3>登陸頁</h3>        <c:if test="${not empty error}"><div  style="color: red">${error}</div></c:if><c:if test="${not empty msg}"><div>${msg}</div></c:if><form name='f' action='/gkweb/login' method='POST'><table><tr><td>用戶名:</td><td><input type='text' name='username' value=''></td></tr><tr><td>密碼:</td><td><input type='password' name='password'/></td></tr><tr><td colspan='2'><input name="submit" type="submit" value="登陸"/></td></tr>               </table><input type="hidden" name="${_csrf.parameterName}"value="${_csrf.token}" /></form></body>
</html>

此處參考:http://www.mkyong.com/spring-security/spring-security-form-login-example/

?

?

配置多個頁面權限控制

?

.antMatchers("/news/*","/user/*").hasRole("USER")

寫法二

?

.antMatchers("/news/*").hasRole("USER")
.antMatchers("/user/*").hasRole("USER")

可以將任意多的antMatchers(),anyRequest()連接起來,但是這些規則會按給定的順序發揮作用,所以需要將最為具體的請求路徑放在最前面,而最不具體的路徑anyRequest()放在后面,不然不具體的就會覆蓋掉具體的。
?

?

?

    @Overrideprotected void configure(HttpSecurity http) throws Exception {http.authorizeRequests().antMatchers("/", "/home").permitAll().anyRequest().authenticated().and().formLogin().loginPage("/login").defaultSuccessUrl("/helloadmin").permitAll().and().logout().permitAll();}

?

對URL進行權限配置,使得"/", "/home"不需要登錄就可以訪問,其他需要登錄。登錄的地址是'/login',當登錄成功后將跳轉到/helloadmin頁面,并且登錄、登出頁面都是不需要登錄就可以訪問的。

?

參考:使用Spring Security進行權限驗證

?

?

.httpBasic()

支持彈窗就是windows自帶的認證框進行認證。由于不好擴展這個基本沒什么用,可以不用。

?

.rememberMe()

記住我的狀態

?

.rememberMe().key("web").tokenValiditySeconds(1209600);

?

?

.logout()

注銷功能

?

 @Overrideprotected void configure(HttpSecurity http) throws Exception {http.authorizeRequests().antMatchers("/news/*").hasRole("USER").and().formLogin().loginPage("/login").defaultSuccessUrl("/").failureUrl("/login?error").usernameParameter("username").passwordParameter("password").and().logout().logoutSuccessUrl("/login?logout").and().rememberMe().key("gkweb").tokenValiditySeconds(1209600);}


注銷就是頁面給用戶一個鏈接或者按鈕

?

1.使用jstl聲明退出路徑

引用jar包

?

<dependency><groupId>jstl</groupId><artifactId>jstl</artifactId><version>1.2</version></dependency>

?

?

?

?

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<c:url var="logoutUrl" value="/logout"/>
<form action="${logoutUrl}"method="post">
<input type="submit"value="Log out" />
<input type="hidden"name="${_csrf.parameterName}"value="${_csrf.token}"/>
</form>

?


2.硬編碼退出路徑

?

?

?

<form action="${pageContext.request.contextPath}/logout" method="post"><input type="submit" value="Logout" /><input type="hidden"name="${_csrf.parameterName}"value="${_csrf.token}"/>
</form>

?

3.鏈接退出

?

?

<script>function formSubmit() {document.getElementById("logoutForm").submit();}</script><form action="${pageContext.request.contextPath}/logout" method="post" id="logoutForm"><c:if test="${pageContext.request.userPrincipal.name != null}"><h2>Welcome : ${pageContext.request.userPrincipal.name} | <a href="javascript:formSubmit()"> 退出1-鏈接</a></h2></c:if><input type="submit" value="退出1-按鈕" /><input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/></form><c:url var="logoutUrl" value="/logout"/><form action="${logoutUrl}" method="post"><c:if test="${pageContext.request.userPrincipal.name != null}"><h2>Welcome : ${pageContext.request.userPrincipal.name} | <a href="javascript:formSubmit()"> 退出2-鏈接</a></h2></c:if><input type="submit" value="退出2-按鈕" /><input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/></form>

?

自定義的用戶服務

?

實際開發肯定是需要去數據庫或者其他地方查詢用戶賬號密碼等

?

@Overrideprotected void configure(AuthenticationManagerBuilder auth) throws Exception {auth.userDetailsService(new CustomUserDetailsService(userDao));
}

?

?

?

注意:CustomUserDetailsService需要的bean一定要從userDetailsService調用CustomUserDetailsService的構造器傳遞過去,

而不能直接在CustomUserDetailsService使用@Autowired注解出來。
?

CustomUserDetailsService集成的接口UserDetailsService無需自己重新定義,參考?泛型推斷類型不符合上限

public class CustomUserDetailsService implements UserDetailsService {private final UserMapper userDao;public CustomUserDetailsService(UserMapper u) {this.userDao = u;}@Overridepublic UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {       UserBean user = userDao.findByName(username);        if (user == null) {throw new UsernameNotFoundException("沒有找到對應用戶");}List<SimpleGrantedAuthority> authorities = new ArrayList<>();authorities.add(new SimpleGrantedAuthority(user.getUtype().toString()));return new org.springframework.security.core.userdetails.User(user.getUserName(), user.getPassword(), authorities);}
}

?

關于Spring的單例問題

也就是@Component、@Repository、@Service? 需要說明的是加上這幾個注解都是等效的,都會變成單例。

一般ServiceImpl會加上。

使用的時候

@Autowired
? ? private 接口? 變量

這樣在使用的時候回自動綁定加上@Service的實現類。

特別需要注意的是,這個實現類不可以有成員變量,否則不安全,因為沒有成員變量,只是通過函數參數傳值,所以是安全的

?

javabean一般都必須有成員變量,所以是不能@Service,建議直接new一下使用即可。

@Component和@Bean都是用來注冊Bean并裝配到Spring容器中,但是Bean比Component的自定義性更強。可以實現一些Component實現不了的自定義加載類。

?

為什么dao層和service層用單例,而action用多例

使用單例和多例的判斷條件是會不會對類中公共屬性進行修改,如果有修改則用多例。

action中一般會有前端對應的屬性,如果是單例訪問,所有訪問公用一個action中的成員變量和方法,如果多個請求同時對一個屬性進行修改,則會出現數據出錯;而service中公共屬性頂多是dao層中的引用,dao層中公共屬性是對數據庫包裝類或自定義的類的引用,這個引用通常在項目加載啟動時就已經實例化了,訪問只是使用,并未涉及屬性修改,單例模式可節省系統資源。

總結:Action要接收request的參數,因為參數不同所以用多例;

   Dao中唯一的狀態就是連接數據庫, 但是這個恰好對大家都是相同的, 所以是單例
   Service, 業務邏輯里面的成員變量都是Dao, 既然Dao是無狀態的, 那么Service也可以認為是無狀態的

總結

以上是生活随笔為你收集整理的Spring4实战学习笔记的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

国产精品www| 国产美女网站在线观看 | 午夜久久久久久久久久久 | 色网站中文字幕 | 97狠狠干 | 最近中文字幕在线播放 | 久艹视频在线观看 | 国产精品九色 | 久久久久久亚洲精品 | 9久久精品| 久久精品电影 | 亚洲经典在线 | 成年人免费看 | 久久久久在线 | 久久9999久久免费精品国产 | 国内精品在线看 | 丁香一区二区 | 美女网站视频久久 | 国产精品国产三级国产 | 婷婷性综合 | 国产最新精品视频 | 中国一级片视频 | 日韩精品免费在线播放 | 四虎永久精品在线 | 亚洲最大激情中文字幕 | 久久综合色天天久久综合图片 | 亚洲资源网| 伊人婷婷激情 | 在线观看的av网站 | 久久午夜视频 | 久久久精品国产免费观看同学 | 成年美女黄网站色大片免费看 | 欧美精品色 | 日韩在线观 | 射射射综合网 | 激情在线免费视频 | 欧美日韩在线视频一区 | 日韩精品影视 | 91高清视频免费 | 免费高清在线观看电视网站 | 中文字幕网站视频在线 | 美女福利视频网 | 91豆花在线 | 狠狠亚洲 | av观看网站| 五月婷婷丁香激情 | 午夜婷婷在线观看 | 97色资源| 一二区电影| 久草在线高清视频 | 日韩欧美在线高清 | 欧美日韩国产一区二区三区 | 中文字幕在线播放一区二区 | 久久99在线视频 | 日韩中文幕| 免费国产ww | 久久久官网 | 蜜臀久久99精品久久久酒店新书 | 久久成人国产精品入口 | 久久人人97超碰国产公开结果 | 国产精品日韩欧美一区二区 | 国产香蕉97碰碰碰视频在线观看 | av电影 一区二区 | 91av播放| 国产欧美精品在线观看 | 狠狠干天天射 | 成人免费xyz网站 | 成人影视免费看 | 天天爱天天射天天干天天 | 欧美日韩一级久久久久久免费看 | 亚洲专区路线二 | 国产一级免费在线 | 岛国片在线| 成人在线免费观看网站 | 精品成人免费 | 婷婷丁香av | 综合久久久久久 | 国产精品视频在线看 | av成人动漫 | 亚洲国产精品推荐 | 欧美精品国产综合久久 | 色综合人人 | 国产黄色精品在线观看 | 久香蕉 | 国产精品视频app | 九九激情视频 | 五月天com | 人人盈棋牌 | 久久国产午夜精品理论片最新版本 | 久久99精品热在线观看 | 97热久久免费频精品99 | 99久久久国产精品免费99 | 最新国产在线观看 | 日本久久片 | 欧美久久久久久久久久久久 | 免费手机黄色网址 | 日韩精品一区二区三区免费观看视频 | 国产精品手机在线 | 人人爽人人爽人人爽学生一级 | 狠狠干免费| 亚洲精品一区二区网址 | 色偷偷网站视频 | 91免费在线播放 | 日韩精选在线观看 | 黄色av观看 | 2021国产在线视频 | 水蜜桃亚洲一二三四在线 | 2020天天干天天操 | 狠狠地日| 国产精品爽爽久久久久久蜜臀 | 免费av试看 | 涩涩网站在线播放 | 午夜精品久久久久久久久久久久 | av大全在线看 | 久久精品站 | 成人性生交大片免费观看网站 | 精品专区一区二区 | 日日夜夜噜| 国产成人黄色 | 日日夜夜免费精品视频 | 成人影视免费 | 91一区二区三区在线观看 | 亚洲成人精品久久 | 深夜男人影院 | 天堂久色 | 久草久热| 97视频久久久 | 蜜臀av在线一区二区三区 | 日韩一区二区三区高清在线观看 | 久草精品视频在线看网站免费 | av一区在线 | 国产精品18久久久久久久久久久久 | 久久99国产精品免费网站 | 9ⅰ精品久久久久久久久中文字幕 | 日本中出在线观看 | 国产成人精品一区二区三区福利 | 婷婷精品视频 | 国产乱对白刺激视频不卡 | 久久精品国产亚洲 | 中文字幕av在线播放 | 国产日韩中文字幕 | 成人午夜黄色影院 | 国产视频在线观看一区二区 | 欧美日韩在线精品 | 日韩精品一区二区三区中文字幕 | 国产精品久久免费看 | 一本一本久久a久久精品综合妖精 | 六月天综合网 | 久久伊人五月天 | 日韩免费观看一区二区 | 精品美女在线视频 | 国产中文字幕在线免费观看 | 波多野结衣电影一区二区 | 日韩三区在线观看 | 国产精品6| 日韩v在线91成人自拍 | 97av超碰| 亚洲国产欧美在线人成大黄瓜 | 成人欧美一区二区三区黑人麻豆 | 久久免费视频3 | 日韩性网站 | 五月天婷婷在线播放 | 九草视频在线 | 黄色国产精品 | 中文字幕在线日本 | 色综合色综合久久综合频道88 | 91超在线 | 国内久久精品视频 | 国产一区二区观看 | 激情综合色综合久久 | 最新中文字幕 | 国产在线中文 | 日韩在线观看你懂的 | 在线视频免费观看 | av千婊在线免费观看 | 国产中文字幕在线播放 | 91精品网站在线观看 | 操老逼免费视频 | 少妇性xxx| 欧美福利在线播放 | 91在线观看高清 | 91高清视频免费 | 美女视频久久 | 最近字幕在线观看第一季 | 国内精品视频一区二区三区八戒 | 超级碰碰碰免费视频 | 一级成人网 | 日韩欧美一区视频 | 日韩丝袜在线观看 | 免费国产一区二区 | 久草成人在线 | 91精品在线免费 | 久久久久国产精品厨房 | 91超国产| 欧美爽爽爽| 久久精品2 | avove黑丝| 国内精品久久久久久中文字幕 | 精品一二三四五区 | 国产午夜在线观看 | 久久成人精品 | 97理论片 | 国产在线视频一区二区三区 | 欧美亚洲另类在线视频 | 亚洲理论在线 | 国产高清亚洲 | 激情视频91 | 五月天天天操 | 成人a在线观看高清电影 | 成人h视频 | 九九国产视频 | 免费观看一区 | 国产在线视频导航 | 在线观看中文字幕一区二区 | av观看在线观看 | 91九色在线视频 | 在线 日韩 av| 91久久国产露脸精品国产闺蜜 | 日日夜夜天天干 | 91av在线免费视频 | 天天躁日日躁狠狠躁av中文 | 免费一级片久久 | 国产午夜一区二区 | 久久亚洲在线 | 亚洲欧洲日韩 | 日日夜夜爱 | 欧美视频www | 中文在线最新版天堂 | 日韩欧美在线播放 | 丁香六月婷婷开心婷婷网 | 五月在线视频 | 最新av在线播放 | 午夜国产福利在线观看 | 亚洲闷骚少妇在线观看网站 | 亚州精品国产 | 久久区二区 | 超级碰碰碰免费视频 | 日韩欧美有码在线 | 久久国产精品区 | 色婷婷 亚洲 | av专区在线 | 国产精品综合av一区二区国产馆 | 91视频在线免费看 | 天天射天天舔天天干 | 久久99在线视频 | 久久精品中文字幕免费mv | 国产精品久久久久久一区二区 | 99成人精品 | 国产综合婷婷 | 精品美女在线视频 | 欧美性春潮| 日韩高清国产精品 | 欧美激情视频一区 | 欧美精品黑人性xxxx | 久久久免费播放 | 中文字幕亚洲精品在线观看 | www.xxxx欧美 | 91精品久久久久久久久久久久久 | 久久久久久久久艹 | 成人黄色小说在线观看 | 亚洲三级黄 | 成人免费一区二区三区在线观看 | 不卡中文字幕在线 | 亚洲日本精品视频 | 91视频国产免费 | 99久久精品网 | 国产成人精品av在线 | 天天操偷偷干 | 又色又爽又黄高潮的免费视频 | 国产成人三级在线播放 | 视频一区二区视频 | 特级a老妇做爰全过程 | 国产一区在线看 | 最新中文字幕视频 | 日韩在线视频在线观看 | 天天综合网天天 | 久久看片 | 欧美日视频 | 伊人中文字幕在线 | 99久久精品免费看国产一区二区三区 | 国产黄色av影视 | 在线亚洲欧美日韩 | www91在线| 日本精品视频一区二区 | 国产污视频在线观看 | 国产成人精品一区二区三区在线 | 日日干天天爽 | 婷婷av网| 成人免费观看在线视频 | 精品久久视频 | www.久久久精品 | 一本一本久久a久久精品综合小说 | 天天做天天爱夜夜爽 | 精品 一区 在线 | 欧美天堂视频在线 | 亚洲精品天天 | 国产剧情一区二区 | 久久久久久高潮国产精品视 | 国产日韩亚洲 | 亚洲美女免费视频 | 麻豆传媒视频在线播放 | 久久草网| 五月婷婷,六月丁香 | 日韩欧美有码在线 | 黄色亚洲大片免费在线观看 | 99热只有精品在线观看 | 黄色三级网站 | 天天干天天怕 | 99热手机在线观看 | 正在播放一区二区 | 久久久国产精品电影 | 96久久| 亚洲欧美视屏 | 欧美国产91 | 欧美日韩久久不卡 | 精品国产一区二区三区日日嗨 | 国产一二区精品 | 亚洲欧美激情精品一区二区 | 日韩草比 | 97超碰色| 国产久视频 | 午夜精品久久久久久久爽 | 7777精品伊人久久久大香线蕉 | 国产日韩精品一区二区 | 粉嫩一区二区三区粉嫩91 | 久久亚洲婷婷 | 国产1区在线观看 | 毛片一级免费一级 | 91视频免费看网站 | 久久视频6 | 麻豆传媒视频在线 | 五月天综合网 | 免费v片| 亚洲黄色免费 | 在线观看亚洲视频 | 91精品国产91久久久久久三级 | 久久视频免费观看 | 日韩免费视频 | 一级α片免费看 | 国产香蕉视频 | 国产欧美精品一区二区三区 | 免费裸体视频网 | 中文字幕高清免费日韩视频在线 | 在线观看免费高清视频大全追剧 | 黄a在线观看 | 91桃色在线播放 | 亚洲在线网址 | 日韩高清不卡一区二区三区 | 婷婷亚洲综合五月天小说 | av片在线观看免费 | 少妇bbb搡bbbb搡bbbb | 狠狠狠狠狠操 | 亚洲精品中文在线观看 | 99国产一区 | 91男人影院 | 日本深夜福利视频 | 96精品视频 | 欧美婷婷综合 | 久久久久北条麻妃免费看 | 在线免费观看黄网站 | 91视频免费国产 | 精品国产自| 国产成人中文字幕 | 国产精品福利在线观看 | 日日操天天射 | 在线观看aa | 欧美成人日韩 | 国产中文字幕在线免费观看 | 国产日韩视频在线 | 综合久久综合久久 | 二区三区精品 | 亚洲免费视频观看 | 久久久久久久久久电影 | 国产玖玖在线 | 91精品国产综合久久久久久久 | 亚洲综合国产精品 | 国产一区在线精品 | 日韩精品不卡在线 | 九九免费在线观看 | 国产成人一区在线 | 色综合久久久久网 | 日韩中文字幕免费看 | 免费试看一区 | 波多野结衣视频一区 | 久久草在线精品 | 日日夜夜噜 | 国产福利专区 | 国产精品永久在线 | 久久久久国产成人免费精品免费 | 国产一区二区在线视频观看 | 久草视频在 | 波多野结衣视频一区二区三区 | 国产精品久久久久久久久久久久冷 | 亚洲激情免费 | 国产高清一区二区 | 色丁香久久 | 在线免费看黄色 | 91在线中字| 日韩欧美电影网 | 五月天天av| 亚洲黄在线观看 | 色七七亚洲影院 | 日本aaa在线观看 | 成人在线观看你懂的 | 午夜精品福利一区二区三区蜜桃 | 91香蕉国产 | 99热最新地址 | 日韩欧美在线综合网 | 国产第一页在线观看 | 91成人小视频 | 国产精品va在线观看入 | 97精品国产97久久久久久 | a极黄色片 | 亚洲成a人片在线观看中文 中文字幕在线视频第一页 狠狠色丁香婷婷综合 | 九九视频免费 | 国内精品久久影院 | 亚洲天天摸日日摸天天欢 | 91麻豆视频网站 | 国产伦理久久精品久久久久_ | 日本二区三区在线 | 亚洲精品国产高清 | 国产精品va在线 | 中文字幕视频一区 | 中文字幕永久在线 | 91人人人 | 久久经典国产视频 | 九九视频免费在线观看 | 国产精品日韩久久久久 | 国产码电影| 免费男女网站 | 久久夜夜夜 | 国产精品一区二区吃奶在线观看 | 欧美a在线免费观看 | 成人国产网站 | 久草精品电影 | 国产一级片毛片 | 国产精品久久久久久久7电影 | 免费成人黄色 | 日韩激情三级 | 成人免费观看网址 | 精品一区二区av | 中文资源在线播放 | 成人国产网站 | 欧美伦理电影一区二区 | 一区二区三区高清在线观看 | 91精品国产福利在线观看 | 日韩理论在线观看 | a v在线视频 | 久久99精品国产麻豆婷婷 | 久久久五月婷婷 | 天天摸天天操天天舔 | 毛片的网址 | 国产精品中文字幕在线 | 丁香视频免费观看 | 亚洲动漫在线观看 | 最新国产在线视频 | 四虎成人精品永久免费av | 日韩黄色大片在线观看 | 国产成人在线一区 | 91尤物国产尤物福利在线播放 | 久久国产一区二区三区 | 国产精品porn | 51久久夜色精品国产麻豆 | 久久精品视频国产 | 久久国产欧美日韩 | 久久久国产影视 | 三级黄色大片在线观看 | 欧美激情视频在线免费观看 | 97超碰免费| 国产专区在线视频 | 久久精品婷婷 | 天天操天天透 | www.91成人 | 五月天天色| 黄色成品视频 | 中文 一区二区 | 西西444www | 免费精品视频在线观看 | 国产日韩欧美在线看 | 欧美日韩国产综合一区二区 | 午夜色性片 | 色综合久久66 | 久草在线这里只有精品 | 中文字幕一区2区3区 | 最新日本中文字幕 | 亚洲五月花| 欧美日韩在线观看一区二区三区 | 伊人影院99 | 久久久免费观看完整版 | 91成人看片 | 婷婷激情五月 | 成人小电影在线看 | 国产99久久久国产精品免费看 | 国产在线播放一区二区三区 | 欧美日本不卡高清 | www.婷婷色| 看v片| 久久激情视频 久久 | 中文字幕在线观看视频免费 | 中文字幕九九 | 99se视频在线观看 | 免费看高清毛片 | 成人免费xxx在线观看 | 在线观看中文字幕av | 亚洲第一av在线播放 | 911亚洲精品第一 | 天天天天天操 | 久久久视屏 | 国内99视频| 亚州精品在线视频 | 久久任你操 | 最新中文字幕在线资源 | 免费在线国产精品 | 成人中文字幕在线 | 五月婷婷免费 | 国内精品久久久久影院男同志 | 免费福利视频导航 | 婷婷色影院 | 91精品婷婷国产综合久久蝌蚪 | 在线看一区二区 | 国产涩图 | 天天干天天在线 | 奇米影音四色 | 成人动态视频 | 精品中文字幕在线播放 | 超碰官网| 日韩视频免费看 | 五月黄色| 国产伦精品一区二区三区四区视频 | 中文字幕第一页av | 91亚洲精品国产 | 日韩在线观看中文 | 国产精品亚洲精品 | 午夜婷婷在线观看 | 91久草视频| 久久精品影片 | 91在线免费观看网站 | 91看片一区二区三区 | 激情五月综合网 | 天天综合人人 | 美女在线免费观看视频 | 九九久久电影 | 国产高清在线a视频大全 | 欧美激情视频一区 | 一级黄色片在线免费看 | 免费黄色激情视频 | 日本女人的性生活视频 | 人人爽爽人人 | 中文字幕国产视频 | 国产一区在线视频播放 | 国产色在线,com| 日韩黄色av网站 | 一本一道波多野毛片中文在线 | 欧美激情综合五月色丁香 | av高清一区二区三区 | 欧美巨乳波霸 | 久久国产美女 | 91av综合| 亚洲精品小区久久久久久 | 激情 亚洲| 国产中文欧美日韩在线 | 九九久久免费 | 久草视频在线播放 | 天堂av在线7 | 国产丝袜美腿在线 | 国产精品一区二区在线 | 久久综合色播五月 | av大片免费在线观看 | 国产精品99久久久久久小说 | 久久视频在线观看中文字幕 | 久久精品免费播放 | 日韩欧美大片免费观看 | a视频在线 | 国内精品久久久久久久久久 | 日韩av电影手机在线观看 | 西西大胆啪啪 | 亚洲精品中文在线观看 | 日韩国产精品久久久久久亚洲 | 国产一区二区在线视频观看 | 99精品欧美一区二区三区 | 最近最新中文字幕 | 欧美成人久久 | 久久久久97国产 | 精品国产理论 | a视频在线播放 | 一区免费视频 | 91在线国产观看 | 福利精品在线 | 成人午夜电影免费在线观看 | 91毛片在线观看 | 片黄色毛片黄色毛片 | 色综合久久天天 | 欧美精品亚州精品 | 在线观影网站 | 国产精品久久久久一区二区 | 18性欧美xxxⅹ性满足 | 四虎www| 精品久久久久久久久中文字幕 | 欧美精品资源 | 久草在线视频免赞 | 国产专区在线视频 | 三级黄色大片在线观看 | 国产糖心vlog在线观看 | 香蕉网址| 天天干,天天射,天天操,天天摸 | 日韩中文字幕第一页 | 免费精品| 日韩理论电影在线观看 | 99精品久久99久久久久 | 国产在线成人 | 国产精品久久久久一区二区国产 | 91视频在线观看大全 | a'aaa级片在线观看 | 四虎在线观看网址 | 91精品国自产在线观看欧美 | 午夜美女福利 | 精品欧美一区二区在线观看 | 国产色拍 | 日日夜夜添 | 免费日韩一区 | 免费国产黄线在线观看视频 | av网站在线免费观看 | 欧美与欧洲交xxxx免费观看 | 久久久久久久久久久高潮一区二区 | 国产综合在线视频 | 成人国产精品 | 免费亚洲一区二区 | 日本在线精品视频 | www.亚洲精品 | 午夜美女视频 | 97成人资源站 | 国产很黄很色的视频 | 久久精品视频网站 | 男女视频久久久 | 成人四虎 | 日韩中文字幕在线看 | 激情综合网在线观看 | 91传媒在线看 | 天天操天操 | 日韩a在线看 | 成人午夜在线观看 | 亚洲精品国产欧美在线观看 | 亚洲国产免费网站 | 免费在线观看av网址 | 黄色网大全 | 日韩精品视 | 亚洲国产中文字幕 | www免费看片com | 国产精品久久久久久久免费 | 亚洲国产小视频在线观看 | 日韩成人中文字幕 | 久久嗨 | 国产精品专区在线 | 岛国av在线 | 日韩天天综合 | 中文字幕xxxx | 在线观看中文字幕网站 | 免费看国产视频 | 69国产成人综合久久精品欧美 | 99精品国产一区二区三区麻豆 | 国产精品久久久久aaaa | 国产精品s色 | 婷婷在线精品视频 | 中文字幕黄色网 | 国产高清一区二区 | 国产一区二区三区四区在线 | 国产一区在线免费观看 | 91av视频在线播放 | 99精品国产亚洲 | 天天操月月操 | 国产精品激情在线观看 | 天天综合在线观看 | 黄色一级性片 | 久久手机免费视频 | 日韩午夜一级片 | 成人h动漫在线看 | 免费看高清毛片 | 亚洲精品乱码久久久久v最新版 | 成人欧美一区二区三区在线观看 | 视频国产精品 | 国产精品免费人成网站 | 日本久久久精品视频 | 国产r级在线观看 | 国产一性一爱一乱一交 | 99热手机在线 | 99精品国产99久久久久久97 | 亚洲国产精品激情在线观看 | 国产69精品久久久久99尤 | 叶爱av在线| 最近日本韩国中文字幕 | 天天躁天天操 | 国产精品永久免费视频 | 久久曰视频 | 午夜私人影院久久久久 | 欧美性另类| 久久毛片高清国产 | 五月婷婷六月丁香在线观看 | 最新日韩视频在线观看 | 国产精品男女视频 | 91黄视频在线 | 午夜在线国产 | 久久国产精品99精国产 | 日本激情视频中文字幕 | 国产在线p | 国产亚洲精品久久久久久电影 | 四川bbb搡bbb爽爽视频 | 少妇精品久久久一区二区免费 | 99久久精品一区二区成人 | 国产精品区一区 | 亚洲精品午夜久久久 | 91麻豆精品国产91久久久无需广告 | 日韩欧美精品一区二区 | zzijzzij日本成熟少妇 | 97视频人人澡人人爽 | 九九视频免费观看视频精品 | 永久免费视频国产 | 国产精品一区免费在线观看 | 国产成人精品国内自产拍免费看 | 日本久草电影 | 91香蕉视频好色先生 | 四虎成人免费影院 | 天天操天天干天天操天天干 | 美女免费视频黄 | 在线观看中文字幕dvd播放 | 在线观看国产日韩欧美 | 国产人成一区二区三区影院 | 少妇激情久久 | 欧美成人影音 | 在线观看国产91 | 四虎影视精品 | 免费热情视频 | 欧美一区二区三区在线播放 | 国产午夜精品一区二区三区 | 亚洲最大成人免费网站 | 91丨九色丨勾搭 | 天天干天天综合 | 国产美女免费观看 | 国产一区二区三区免费在线 | 国产精品美女久久久 | 日韩av成人在线观看 | 亚洲在线视频免费观看 | 免费精品视频 | 欧美大片aaa | 亚洲春色奇米影视 | 在线观看视频精品 | 在线观看黄色av | 精品日韩在线一区 | 麻豆成人小视频 | 久久精品99北条麻妃 | 手机成人av | 天天操网站| 亚洲黄色一级电影 | 国产精品毛片久久久久久 | av中文字幕在线观看网站 | 日日操天天操夜夜操 | 日韩高清在线不卡 | 8x成人免费视频 | av一级在线观看 | 成人免费在线观看电影 | 五月婷婷丁香在线观看 | 国产中文字幕在线视频 | 久草在线观看 | 麻豆精品视频 | 黄色avwww | 国产亚洲成av片在线观看 | 久久视影 | 97在线看| av电影av在线 | 少妇bbbb| 欧美精品xxx | wwwww.国产| 久久综合久久综合这里只有精品 | www色网站| 久久精品系列 | 在线小视频国产 | 欧美大片在线观看一区 | 网站在线观看日韩 | 国产成人精品综合久久久久99 | 男女视频国产 | 国产美女主播精品一区二区三区 | 亚洲国产精品久久久 | 成人h电影在线观看 | a成人v | 97精品超碰一区二区三区 | 久久精品精品电影网 | 园产精品久久久久久久7电影 | 免费h精品视频在线播放 | 国产一级免费播放 | 久久精品美女 | 成人免费在线看片 | 欧美一区免费观看 | 国内精品视频久久 | 视色网站| av三级在线免费观看 | 日韩黄色在线电影 | 日本性动态图 | 天天操夜夜干 | 国产成人在线一区 | 东方av在线免费观看 | 人人插人人舔 | 色婷婷视频在线 | aaaaaa毛片| 五月天久久狠狠 | 精品一区二区三区在线播放 | 91视频免费国产 | 国产精品免费一区二区三区 | 精品国产一区二区三区久久影院 | 成人91在线| av黄色国产 | 91在线看黄 | 九九热在线精品视频 | 91在线看片 | 亚洲综合成人婷婷小说 | 91免费观看网站 | 亚洲国产精品电影 | 久草视频精品 | 精品黄色在线 | 日日夜夜天天综合 | 欧美精品久久久 | 一区二区免费不卡在线 | 91亚洲精品久久久蜜桃网站 | 精品久久久久亚洲 | 久久视频二区 | 在线中文字母电影观看 | 亚洲综合色av | 亚洲影院天堂 | 欧美乱熟臀69xxxxxx | 久久这里只有精品视频99 | 成人免费在线看片 | 五月婷婷六月丁香激情 | 久久在草 | 在线影院 国内精品 | 国产精品久久久久久影院 | 国产精品美女免费视频 | 久草在线视频首页 | 一级电影免费在线观看 | 久久久国产日韩 | 999久久a精品合区久久久 | 久久伊人五月天 | 久久国产精品免费 | 国产精品九九久久99视频 | 久久成人一区二区 | 亚洲国产精品激情在线观看 | 国产99久久久国产精品 | 欧美大片mv免费 | 天天干天天综合 | 久久免费视频网 | 国产91学生| 精品9999 | 久久 地址 | 免费黄色网址大全 | 国外成人在线视频网站 | 九九热在线精品 | 国产精品乱码一区二区视频 | 国产不卡高清 | 久久成人麻豆午夜电影 | 99视频在线看 | 国产99区 | 2023av| 国产精品99久久久久久小说 | 国产黑丝一区二区三区 | 不卡的一区二区三区 | 黄色小说视频在线 | 97久久精品午夜一区二区 | 五月婷婷六月丁香在线观看 | 天天操天天摸天天爽 | 成人av一区二区兰花在线播放 | 亚洲精品美女在线观看播放 | 亚洲电影影音先锋 | 国产黄色av网站 | 亚洲视频精品在线 | 国产日本在线 | 97精品超碰一区二区三区 | 日本中文乱码卡一卡二新区 | 国产精品久久久久亚洲影视 | 国产麻豆电影在线观看 | 久久免费观看少妇a级毛片 久久久久成人免费 | 91免费在线视频 | .国产精品成人自产拍在线观看6 | 国产亚洲永久域名 | 亚洲网久久 | 欧美日韩另类视频 | 久久在线免费 | 91九色国产蝌蚪 | 欧美日韩精品综合 | 日韩二区三区在线观看 | 五月色丁香 | 国产丝袜一区二区三区 | 久久不射电影院 | 日精品在线观看 | 波多在线视频 | 国产精品国产三级国产 | 少妇bbbb搡bbbb搡bbbb | 久久永久免费 | 韩国av一区二区 | 黄色三级免费网址 | 精品国产一区二区三区四区在线观看 | 久久久资源 | 日本中文字幕在线看 | 亚洲乱码国产乱码精品天美传媒 | 激情av五月婷婷 | 国产一区二区久久久久 | 国产无区一区二区三麻豆 | 日韩欧美大片免费观看 | 中午字幕在线观看 | 国产精品久久久久9999 | 日韩欧美精品免费 | 国产精品久久久久久久午夜片 | 中文字幕观看在线 | 久久精品视频网站 | 91精品在线观看入口 | 欧美日韩午夜在线 | av+在线播放在线播放 | 五月天综合色激情 | 插综合网 | 欧美国产日韩一区二区 | 日韩在线资源 | 久久99在线观看 | 黄色福利网站 | 亚洲精品人人 | 国产一二三精品 | 日本公乱妇视频 | 亚洲精品国 | 国产中文字幕在线观看 | 欧美极品少妇xxxxⅹ欧美极品少妇xxxx亚洲精品 | 日韩午夜电影院 | 友田真希x88av | 天天草天天 | 69热国产视频 | 91亚色视频 | 激情综合色综合久久综合 | 亚洲精品美女久久 | 99久久久久国产精品免费 | 伊人成人精品 | 黄色片网站 | 日韩精品免费 | 偷拍精偷拍精品欧洲亚洲网站 | 99精品亚洲| 在线看成人片 | 国产精品日韩精品 | 狠狠色丁香久久婷婷综合五月 | 日韩欧美成人网 | 国产精品一区二区久久国产 | 99国产一区二区三精品乱码 | 在线观看视频h | 日日射av | 97网| 毛片激情永久免费 | 99精品视频在线 | 综合网在线视频 | 亚洲国产精久久久久久久 | 最近高清中文在线字幕在线观看 | 欧美日韩国产mv | 国产视频二区三区 | 国产日韩精品一区二区三区 | 97人人人人| 91精品婷婷国产综合久久蝌蚪 | 久久国产色 | 最近日本中文字幕a | 精品中文字幕在线播放 | 国产日韩欧美在线观看视频 | 久久激情视频 久久 | www免费网站在线观看 | 一区二区三区免费在线播放 | 日韩激情网 | 黄色小网站在线 | 一区二区三区 亚洲 | 精品免费一区二区三区 | 日韩大片在线免费观看 | 国产色视频 | 在线看福利av | 亚洲精品在线一区二区 | 97在线超碰 | 91亚洲精品久久久蜜桃借种 | 国产美女网站视频 | 六月色播 | 亚洲国产精品成人av | 国产精品久久一区二区三区不卡 | 亚洲精品中文字幕在线 | 国产成视频在线观看 | 99精品视频免费 | 国产精品久久久久一区二区国产 | 日韩在线网址 | 99这里有精品 | 国产 日韩 中文字幕 | 精品久久久久一区二区国产 | 99精品视频免费全部在线 | 人人舔人人舔 | 日韩一级电影在线观看 | 国产69久久久欧美一级 | 天天插伊人 | 久久精品一区二区三区国产主播 | 激情在线五月天 | 日韩av播放在线 | 一区二区三区四区五区六区 | 成年人电影毛片 | 中文字幕日本特黄aa毛片 | 欧美日韩精品免费观看视频 |