• <noscript id="e0iig"><kbd id="e0iig"></kbd></noscript>
  • <td id="e0iig"></td>
  • <option id="e0iig"></option>
  • <noscript id="e0iig"><source id="e0iig"></source></noscript>
  • SpringBoot web--RestfulCRUD-demo-登陸&amp;amp;攔截器(學習筆記17)

    1、登錄


    <!DOCTYPE html>
    <html lang="en" xmlns:th="http://www.thymeleaf.org">
    	<head>
    		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    		<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    		<meta name="description" content="">
    		<meta name="author" content="">
    		<title>Signin Template for Bootstrap</title>
    		<!-- Bootstrap core CSS -->
    		<link href="asserts/css/bootstrap.min.css" th:href="@{/webjars/bootstrap/4.1.0/css/bootstrap.min.css}" rel="stylesheet">
    		<!-- Custom styles for this template -->
    		<link href="asserts/css/signin.css" th:href="@{/asserts/css/signin.css}" rel="stylesheet">
    	</head>
    
    	<body class="text-center">
    		<form class="form-signin" action="dashboard.html" th:action="@{/user/login}" method = "post">
    			<img class="mb-4" src="asserts/img/bootstrap-solid.svg" th:src="@{/asserts/img/bootstrap-solid.svg}" alt="" width="72" height="72">
    			<h1 class="h3 mb-3 font-weight-normal" th:text="#{index.tip}">Please sign in</h1>
    			<p style="color:red" th:text="${msg}" th:if="${not #strings.isEmpty(msg)}"></p>
    			<label class="sr-only" th:text="#{index.username}">Username</label>
    			<input type="text" name="username" class="form-control" placeholder="Username" th:placeholder="#{index.username}" required="" autofocus="">
    			<label class="sr-only" th:text="#{index.password}">Password</label>
    			<input type="password" name="password" class="form-control" placeholder="Password" th:placeholder="#{index.password}" required="">
    			<div class="checkbox mb-3">
    				<label>
    		          <input type="checkbox" value="remember-me"> [[#{index.remember}]]
    		        </label>
    			</div>
    			<button class="btn btn-lg btn-primary btn-block" type="submit" th:text="#{index.btn}">Sign in</button>
    			<p class="mt-5 mb-3 text-muted"> 2017-2018</p>
    			<a class="btn btn-sm" th:href="@{/index.html(lang='zh_CN')}">中文</a>
    			<a class="btn btn-sm" th:href="@{/index.html(lang='en_US')}">English</a>
    		</form>
    
    	</body>
    
    </html>



    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.DeleteMapping;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.PostMapping;
    import org.springframework.web.bind.annotation.PutMapping;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    
    @Controller
    @RequestMapping(value="/user")
    public class UserController {
    
    	// 在Rest風格中可以這么寫
    	//@GetMapping
    	//@DeleteMapping
    	//@PutMapping
    	//@PostMapping(value="/user/login")
    	@RequestMapping(value="login", method = RequestMethod.POST)
    	public String login(String username, String password, Map<String, Object> map){
    		if("admin".equals(username) && "123".equals(password)){
    			//return "dashboard";
    			/**
    			 * 登錄成功,防止表單重復提交,可以重定向某個路徑信息,
    			 * 這個路徑是不存在的,通過路徑映射現次設置相關的頁面路徑
    			 */
    			return "redirect:/main";
    		}
    		map.put("msg", "登錄失敗");
    		return "index";
    	}
    }

    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.web.servlet.LocaleResolver;
    import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
    import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
    import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
    
    import com.demo.springbootweb.component.MyLocaleResolver;
    
    // 使用WebMvcConfigurerAdapter可以來擴展SpringMVC的功能
    // @EnableWebMvc   不要接管SpringMVC
    @Configuration
    public class MyMvcConfig extends WebMvcConfigurationSupport {
    
    	private static final String[] CLASSPATH_RESOURCE_LOCATIONS = {
    			"classpath:/META-INF/resources/", "classpath:/resources/",
    			"classpath:/static/", "classpath:/public/" };
    
    	/**
    	 * 解決springboot項目中的html文件引用js、css、圖片的問題
    	 */
    	@Override
    	public void addResourceHandlers(ResourceHandlerRegistry registry) {
    		if (!registry.hasMappingForPattern("/webjars/**")) {
    			registry.addResourceHandler("/webjars/**").addResourceLocations(
    					"classpath:/META-INF/resources/webjars/");
    		}
    		if (!registry.hasMappingForPattern("/**")) {
    			registry.addResourceHandler("/**").addResourceLocations(
    					CLASSPATH_RESOURCE_LOCATIONS);
    		}
    	}
    	
    	/**
    	 * 路徑映射
    	 * @return
    	 */
    	@Override
    	protected void addViewControllers(ViewControllerRegistry registry) {
    		registry.addViewController("/main").setViewName("dashboard");
    		super.addViewControllers(registry);
    	}
    
    	/**
    	 * 配置自己的國際化語言解析器
    	 * 
    	 * @return
    	 */
    	@Bean
    	public LocaleResolver localeResolver() {
    		return new MyLocaleResolver();
    	}
    
    }

    上面重定向的問題:http://localhost:8080/crud/main 在用戶不登錄的狀態,依然可以訪問主頁面信息?

    2、攔截器  進行登錄檢查


    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.springframework.util.StringUtils;
    import org.springframework.web.servlet.HandlerInterceptor;
    import org.springframework.web.servlet.ModelAndView;
    
    /**
     * 登錄攔截器  登錄檢查
     * @author john
     *
     */
    public class LoginHandlerInterceptor implements HandlerInterceptor {
    
    	/**
    	 * 
    	 */
    	@Override
    	public boolean preHandle(HttpServletRequest request,
    			HttpServletResponse response, Object handler) throws Exception {
    		//return HandlerInterceptor.super.preHandle(request, response, handler);
    		Object attribute = request.getSession().getAttribute("loginUser");
    		if(StringUtils.isEmpty(attribute)){
    			request.setAttribute("msg", "沒有權限請登錄");
    			// 未登錄,返回登錄頁面
    			request.getRequestDispatcher("/").forward(request, response);
    			// response.sendRedirect("/");
    			return false;
    		}else{
    			return true;
    		}
    	}
    	
    	@Override
    	public void postHandle(HttpServletRequest request,
    			HttpServletResponse response, Object handler,
    			ModelAndView modelAndView) throws Exception {
    		// TODO Auto-generated method stub
    		HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
    	}
    	
    	@Override
    	public void afterCompletion(HttpServletRequest request,
    			HttpServletResponse response, Object handler, Exception ex)
    			throws Exception {
    		// TODO Auto-generated method stub
    		HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
    	}
    	
    }
    

    import java.util.ArrayList;
    import java.util.List;
    
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.web.servlet.LocaleResolver;
    import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
    import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
    import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
    import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
    
    import com.demo.springbootweb.component.LoginHandlerInterceptor;
    import com.demo.springbootweb.component.MyLocaleResolver;
    
    // 使用WebMvcConfigurationSupport可以來定制、擴展SpringMVC的功能
    // @EnableWebMvc   不要接管SpringMVC
    @Configuration
    public class MyMvcConfig extends WebMvcConfigurationSupport {
    
    	private static final String[] CLASSPATH_RESOURCE_LOCATIONS = {
    			"classpath:/META-INF/resources/", "classpath:/resources/",
    			"classpath:/static/", "classpath:/public/" };
    
    	/**
    	 * 解決springboot項目中的html文件引用js、css、圖片的問題
    	 * 想自定義靜態資源映射目錄的話,只需重寫addResourceHandlers方法即可。
    	 */
    	@Override
    	public void addResourceHandlers(ResourceHandlerRegistry registry) {
    		registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
    		registry.addResourceHandler("/**").addResourceLocations(CLASSPATH_RESOURCE_LOCATIONS);
    		super.addResourceHandlers(registry);
    	}
    	
    	/**
    	 * 頁面跳轉addViewControllers
    	 * 注冊路徑映射
    	 * @return
    	 */
    	@Override
    	protected void addViewControllers(ViewControllerRegistry registry) {
    		registry.addViewController("/").setViewName("index");
    		registry.addViewController("/index").setViewName("index");
    		registry.addViewController("/index.html").setViewName("index");
    		registry.addViewController("/main").setViewName("dashboard");
    		super.addViewControllers(registry);
    	}
    	
    	/**
    	 * 注冊攔截器
    	 */
    	@Override
    	protected void addInterceptors(InterceptorRegistry registry) {
    		
    		List<String> patterns = new ArrayList<String>(); // 排除訪問請求
    		patterns.add("/");
    		patterns.add("/index.html");
    		patterns.add("/index");
    		patterns.add("/user/login");
    		patterns.add("/webjars/**");// webjars下的靜態資源不需要攔截
    		patterns.add("/asserts/**");// asserts下的靜態資源不需要攔截
    		registry.addInterceptor(new LoginHandlerInterceptor())
    				.addPathPatterns("/**") // 攔截所有請求
    				.excludePathPatterns(patterns);
    		super.addInterceptors(registry);
    	}
    
    
    	/**
    	 * 配置自己的國際化語言解析器
    	 * 
    	 * @return
    	 */
    	@Bean
    	public LocaleResolver localeResolver() {
    		return new MyLocaleResolver();
    	}
    
    }


    事例:https://download.csdn.net/download/yufang131/10425109

    感謝--尚硅谷


    版權聲明:本文為yufang131原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
    本文鏈接:https://blog.csdn.net/yufang131/article/details/80365727

    智能推薦

    【springboot】攔截器

    攔截器:     見字如意 正文: 定義一個實現了WebRequestInterceptor 接口的 定義繼承了HandlerInterceptorAdapter的攔截器 加入到項目中:WebMvcConfigurer 效果圖: 訪問 http://localhost:8080/index 和上述 理論無差了 攔截器還是很簡單的 感謝分享: 《JavaEE開...

    Springboot 攔截器

    攔截器和過濾器有點相似,但又有不同。 1.攔截器是屬于框架Spring MVC ,過濾器是基于serlvet。 攔截器: 過濾器: 2.處理時機:  過濾器執行在前,攔截器執行在后,攔截器是針對于controller。 3.實現方式不同:過濾器是基于函數回調,攔截器是基于代理模式。   Springboot實現攔截器如下: 實現interceptor接口,實現攔截器接口方法: ...

    SpringBoot攔截器

    1.新建一個攔截器控制器 } 2.配置攔截器...

    HTML中常用操作關于:頁面跳轉,空格

    1.頁面跳轉 2.空格的代替符...

    freemarker + ItextRender 根據模板生成PDF文件

    1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...

    猜你喜歡

    電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!

    Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...

    requests實現全自動PPT模板

    http://www.1ppt.com/moban/ 可以免費的下載PPT模板,當然如果要人工一個個下,還是挺麻煩的,我們可以利用requests輕松下載 訪問這個主頁,我們可以看到下面的樣式 點每一個PPT模板的圖片,我們可以進入到詳細的信息頁面,翻到下面,我們可以看到對應的下載地址 點擊這個下載的按鈕,我們便可以下載對應的PPT壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...

    Linux C系統編程-線程互斥鎖(四)

    互斥鎖 互斥鎖也是屬于線程之間處理同步互斥方式,有上鎖/解鎖兩種狀態。 互斥鎖函數接口 1)初始化互斥鎖 pthread_mutex_init() man 3 pthread_mutex_init (找不到的情況下首先 sudo apt-get install glibc-doc sudo apt-get install manpages-posix-dev) 動態初始化 int pthread_...

    統計學習方法 - 樸素貝葉斯

    引入問題:一機器在良好狀態生產合格產品幾率是 90%,在故障狀態生產合格產品幾率是 30%,機器良好的概率是 75%。若一日第一件產品是合格品,那么此日機器良好的概率是多少。 貝葉斯模型 生成模型與判別模型 判別模型,即要判斷這個東西到底是哪一類,也就是要求y,那就用給定的x去預測。 生成模型,是要生成一個模型,那就是誰根據什么生成了模型,誰就是類別y,根據的內容就是x 以上述例子,判斷一個生產出...

    精品国产乱码久久久久久蜜桃不卡