精华内容
下载资源
问答
  • vuejs登陆页面 Vue登陆页面模板 (Vue Landing Page Template) When we’re trying to improve at something, it’s not uncommon to turn to the experts to see what we can learn from them. When it comes to ...

    vuejs登陆页面

    Vue登陆页面模板 (Vue Landing Page Template)

    When we’re trying to improve at something, it’s not uncommon to turn to the experts to see what we can learn from them. When it comes to digital marketing, we must look at the best landing page examples of the top industry leaders.

    当我们尝试改进某些东西时,通常不妨找专家看看我们可以从他们那里学到什么。 在数字营销方面,我们必须查看顶级行业领导者的最佳着陆页示例。

    Creating a Landing Page design for your product from scratch can be hard and time-consuming.

    从头开始为产品创建着陆页设计既困难又耗时。

    The Vue landing page examples I share here come from a wide range of industries and feature unique designs guaranteed to get your creative juices flowing and inspire lead generation genius.

    我在这里分享的Vue登陆页面示例来自各行各业,并且具有独特的设计,这些设计可以确保您的创意源源不断,并激发潜在客户生成天才。

    1.Aeroland-Vue JS应用和Saas着陆页模板 (1.Aeroland - Vue JS App & Saas Landing Page Template)

    Aeroland – Vue js App & Sass Landing Page Template. 5 Stunning Homepages are included in this template. You can use any template or mix content from different home pages for your website.

    Aeroland – Vue js应用和Sass着陆页模板。 该模板中包含5个令人惊叹的主页。 您可以使用任何模板或将网站不同首页中的内容混合在一起。

    Aeroland

    2.Tovo-Vue JS应用登陆页面 (2.Tovo - Vue JS App Landing Page)

    Tovo Vue Js Landing Page – This is App Landing Template. It is designed with Bootstrap 4.1.1 and clean & modern Look. Tovo is a very good VuTemplate, which suites best for any kind of App landing page. Tovo looks beautiful at any size, be it a laptop screen, iPad, iPhone, Android Mobile or tablets. It has purpose oriented design, responsive layout and special features. Tovo is Well organized and very easy to customize. It has everything you need to launch your site within next few hours!

    Tovo Vue Js登陆页面–这是App登陆模板。 它采用Bootstrap 4.1.1和干净现代的外观设计。 Tovo是一个非常好的VuTemplate,最适合任何类型的App登陆页面。 无论笔记本电脑的屏幕,iPad,iPhone,Android Mobile或平板电脑,Tovo看起来都很漂亮。 它具有面向目标的设计,响应式布局和特殊功能。 Tovo组织良好,非常易于定制。 它拥有您在接下来的几个小时内启动网站所需的一切!

    Tovo

    3.Sofbox-Vue JS软件登陆页面 (3.Sofbox - Vue JS Software Landing Page)

    Sofbox – Software Responsive vue js Template is a sleek, clean and powerful Saas, WebApp, Software landing page template. With modern and stunning UI/UX elements, this template is a perfect package for any of your web project.

    Sofbox –软件响应vue js模板是一个光滑,干净且功能强大的Saas,WebApp,软件着陆页模板。 凭借现代而令人惊叹的UI / UX元素,此模板是您任何Web项目的完美包装。

    Sofbox

    4.Zimed-Vue Nuxt应用程序着陆页模板 (4.Zimed - Vue Nuxt App Landing Page Template)

    Zimed is a multi-concept, and colorful Vue Nuxt mobile app landing page Template. It is build with Vue, Nuxt Js. It is specially designed for any kind of mobile app, software, sass, startup, marketing, one page and other online businesses.

    Zimed是一个多概念,多彩的Vue Nuxt移动应用程序着陆页模板。 它是用Vue,Nuxt Js构建的。 它是专门为任何类型的移动应用程序,软件,软件,启动,市场营销,一页和其他在线业务而设计的。

    zimed

    5.Jironis-Vue Nuxt App登陆一页模板 (5.Jironis - Vue Nuxt App Landing One Page Template)

    Jironis is an awesome looking app landing one page Vue Nuxt Template. It is build with Vue Js, Nuxt Js. You can easily customized for making any iPhone / Android / Mobile apps landing page/showcase website,template.

    Jironis是一款外观超赞的应用程序,可登陆一页Vue Nuxt模板。 它是用Vue Js,Nuxt Js构建的。 您可以轻松地自定义以制作任何iPhone / Android /移动应用程序着陆页/展示网站,模板。

    nuxt-jironis

    6,神奇 (6.Fantasic)

    Fantasic – Vue JS App Landing Page Template is a stunning Vue template crafted with huge potential. Fantasic is a very good Vue Template, which best for any kind of App landing page.

    太棒了– Vue JS应用程序着陆页模板是一款具有巨大潜力的精美Vue模板。 Fantasic是一个非常好的Vue模板,最适合任何一种应用程序登录页面。

    Fantasic is built with the market trend and the well-anticipated future of the landing page. We have crafted this template with Vue, Bootstrap 4.3.1, HTML5, CSS3, SCSS and W3C validated markup. All our effort was to make your website best in every single perspective.

    Fantasic是根据市场趋势和着陆页的良好预期而构建的。 我们使用Vue,Bootstrap 4.3.1,HTML5,CSS3,SCSS和W3C验证的标记精心制作了此模板。 我们所有的努力都是为了使您的网站在各个方面都达到最佳。

    Fantasic---Vue-JS-App-Landi

    7.2018特斯拉汽车着陆页 (7.2018 Tesla Motors Landing Page)

    The Tesla Motors 2018 Landing Page built with Vue JS Components.

    使用Vue JS组件构建的Tesla Motors 2018着陆页。

    tesla

    8.dasos-应用登陆页面模板 (8.dasos - App Landing Page Template)

    App Landing Page Template built with vue-cli and tailwindcss.

    使用vue-cli和tailwindcss构建的应用着陆页模板。

    dasos

    9,Chatloop-Vue JS应用登陆页面 (9.Chatloop - Vue JS App Landing Page)

    Chatloop Vue Js Landing Page – This is App Landing Template. It is designed with Bootstrap 4.1.1 and clean & modern Look. Chatloop is a very good VueTemplate, which suites best for any kind of App landing page. Chatloop looks beautiful at any size, be it a laptop screen, iPad, iPhone, Android Mobile or tablets. It has purpose oriented design, responsive layout and special features. Chatloop is Well organized and very easy to customize. It has everything you need to launch your site within next few hours!

    Chatloop Vue Js登陆页面–这是App登陆模板。 它采用Bootstrap 4.1.1和干净现代的外观设计。 Chatloop是一个非常好的VueTemplate,最适合任何类型的App登陆页面。 无论是笔记本电脑的屏幕,iPad,iPhone,Android Mobile还是平板电脑,Chatloop看起来都很漂亮。 它具有面向目标的设计,响应式布局和特殊功能。 Chatloop组织良好,非常易于定制。 它拥有您在接下来的几个小时内启动网站所需的一切!

    Chatloop---Vue-JS-App-Landi

    10,Yuktto (10.Yuktto)

    Yuktto Vue Js Responsive one/multi Page Template built with the most popular front-end framework Bootstrap version 4.4.1. It Would be Perfect for All kind of Multi Purpose Website like landing page, bootstrap, business landing page, marketing, mobile app, responsive, software, software landing page, startup, startup landing page can be kickstart by this template.

    Yuktto Vue Js使用最受欢迎的前端框架Bootstrap版本4.4.1构建的响应式多页模板。 对于所有类型的多用途网站,例如登陆页面,引导程序,业务登陆页面,市场营销,移动应用程序,响应式,软件,软件登陆页面,启动,启动登陆页面,它都是完美的。

    yuktto-onepage

    11.Dexam-Vuejs + HTML SaaS,启动和产品登陆页面 (11.Dexam - Vuejs + Html SaaS, Startup & Product Landing Page)

    Dexam is Clean and Modern VueJs + HTML App/Product Landing Page For any kind of Products. It Is Multi Purpose Product Landing/Showcase Page. Dexam is Build With Vue Cli, Bootstrap,BootstrapVue, and SASS. It has Ten Different Home Variations.Dexam Includes HTML Pages Too. Every section is a Components so you can Easily Build Your Own Landing Page by Selecting any component. Dexam Uses BootstrapVue so No Jquery Dependency. Dexam Can be used for an App Landing page, Software Landing Page, Product Landing Page, Product Showcase and many more.

    Dexam是适用于任何产品的简洁现代的VueJs + HTML App /产品登录页面。 这是多用途产品着陆/展示页。 Dexam是使用Vue Cli,Bootstrap,BootstrapVue和SASS构建的。 它具有十种不同的首页变体形式。Dexam也包含HTML页面。 每个部分都是一个组件,因此您可以通过选择任何组件来轻松构建自己的登录页面。 Dexam使用BootstrapVue,因此没有Jquery依赖。 Dexam可用于应用程序登陆页面,软件登陆页面,产品登陆页面,产品展示等等。

    Dexam

    12,威卢克斯 (12.Veluxi)

    Veluxi Is a stunning modern template collection to present your startup & your companies the way they truly deserve!. Built with Vue, Nuxt Js, Vuetify, and Sketch files included. Packed with an assortment fully adaptable templates for your Startup, Saas company, Agencies, Cloud business, Architect company, Cryptocurrency, Personal portfolios, even eCommerce shop.

    Veluxi是一个令人惊叹的现代模板集合,可按其应有的方式向您的创业公司和公司展示! 包含Vue,Nuxt Js,Vuetify和Sketch文件。 包含用于您的Startup,Saas公司,代理商,云业务,Architect公司,Cryptocurrency,个人投资组合,甚至是电子商务商店的各种完全适用的模板。

    Veluxi---Vue-JS-Landing-Pag

    13,多辛 (13.Dorsin)

    Dorsin Vue Js Responsive Landing Page Template built with the most popular front-end framework Bootstrap version 4.2.1. It would be perfect for an app product showcase, startups, personal websites, and even web agencies. You will be easily able to customize it for your needs. It looks beautiful with all sizes, be it a Monitors, laptop screen, iPad, iPhone, Android Mobile or tablets. It has everything you need to launch your site in a couple of hours! We created reusable vuejs components, so you can build multiple apps with common components.

    Dorsin Vue Js响应性着陆页模板,使用最流行的前端框架Bootstrap 4.2.1版构建。 对于应用程序产品展示,初创公司,个人网站,甚至网络代理商来说,这将是完美的选择。 您将能够轻松地根据需要自定义它。 无论是显示器,笔记本电脑的屏幕,iPad,iPhone,Android Mobile还是平板电脑,它看起来都很漂亮。 它具有您在几个小时内启动网站所需的一切! 我们创建了可重用的vuejs组件,因此您可以使用通用组件构建多个应用程序。

    dorsin

    14.Pasona-Vue IT创业公司及公司模板 (14.Pasona - Vue IT Startups & Company Template)

    Pasona is a creative new modern Vue.js template for IT & SaaS Startups. This is created for individuals and companies who want to publish their startups such as IT Solutions, SEO & Marketing, SaaS, PaaS, PC Repair, AI, IoT, Machine Learning, Big Data, Data Science and Data Analytics, Data centric Applications and services initiatives online. This template is suitable for IT Solutions providers, Software services, Business Startup, and any other business agencies.

    Pasona是一个创新的现代Vue.js模板,适用于IT和SaaS初创公司。 它是为希望发布其初创企业的个人和公司创建的,例如IT解决方案,SEO和市场营销,SaaS,PaaS,PC维修,AI,IoT,机器学习,大数据,数据科学和数据分析,以数据为中心的应用程序和服务在线计划。 该模板适用于IT解决方案提供商,软件服务,业务启动以及任何其他业务代理。

    pasona-vue

    15,勒齐尔 (15.Lezir)

    Lezir Vuejs is a fully Responsive Landing page Template in all devices for the perfect choice for your new startup or ongoing business. It is built with the latest bootstrap v4.4.1. You can simply update its contents, images, and scss according to your company info. Lezir has 6 different types of layouts which are quite enough for your business. Lezir is built with Vue-2.

    Lezir Vuejs是所有设备中的完全响应式登陆页面模板,是您新创办或正在进行的业务的完美选择。 它是使用最新的引导程序v4.4.1构建的。 您可以根据公司信息简单地更新其内容,图像和scss。 Lezir有6种不同类型的布局,足以满足您的业务需求。 Lezir用Vue-2构建。

    Lezir-Vuejs

    16.Neal-Vue JS个人投资组合模板 (16.Neal - Vue JS Personal Portfolio Template)

    Neal Vue.js is a Super Clean and Super professional personal portfolio template.If you are a designer, developer, freelancer, marketer it’s only for you. Neal Vue.js template build on Vue.js Latest version. Used Vue router also used with Vue plugins. You can use it for your personal resume, CV, or your portfolio. However, Neal provides you with 1 Unique Homepage, 2 Blog pages, portfolio details Pages. In addition, you will find 100+ icon font, Google Font, etc.

    Neal Vue.js是一款超级清洁和超级专业的个人作品集模板,如果您是设计师,开发人员,自由职业者,市场营销人员,则只为您提供。 基于Vue.js最新版本的Neal Vue.js模板。 二手的Vue路由器也与Vue插件一起使用。 您可以将其用于个人简历,简历或投资组合。 但是,Neal为您提供1个唯一主页,2个Blog页面,项目组合详细信息页面。 此外,您还会找到100多种图标字体,Google字体等。

    Neal---Vue-JS-Personal-Port

    17,Medpill (17.Medpill)

    Medpill Vue Js Responsive Landing Page Template built with the most popular front-end framework Bootstrap version 4.4.1. It Would be Perfect for All kind of Multi Purpose Website like landing page, bootstrap, business landing page, marketing, mobile app, responsive, software, software landing page, startup, startup landing page can be kickstart by this template.

    Medpill Vue Js响应性着陆页模板,使用最流行的前端框架Bootstrap版本4.4.1构建。 对于所有类型的多用途网站,例如登陆页面,引导程序,业务登陆页面,市场营销,移动应用程序,响应式,软件,软件登陆页面,启动,启动登陆页面,它都是完美的。

    Medpill

    18,托米洛 (18.Tomillo)

    Tomillo Vue Js Responsive Landing Page Template built with the most popular front-end framework Bootstrap version 4.4.1. It Would be Perfect for All kind of Multi Purpose Website like landing page, bootstrap, business landing page, marketing, mobile app, responsive, software, software landing page, startup, startup landing page can be kickstart by this template.

    Tomillo Vue Js响应性着陆页模板,使用最流行的前端框架Bootstrap版本4.4.1构建。 对于所有类型的多用途网站,例如登陆页面,引导程序,业务登陆页面,市场营销,移动应用程序,响应式,软件,软件登陆页面,启动,启动登陆页面,它都是完美的。

    Tomillo

    19,Busiapp (19.Busiapp)

    Busiapp Vue Js Responsive Landing Page Template built with the most popular front-end framework Bootstrap version 4.4.1. It Would be Perfect for All kind of Multi Purpose Website like landing page, bootstrap, business landing page, marketing, mobile app, responsive, software, software landing page, startup, startup landing page can be kickstart by this template.

    使用最流行的前端框架Bootstrap版本4.4.1构建的Busiapp Vue Js响应性着陆页模板。 对于所有类型的多用途网站,例如登陆页面,引导程序,业务登陆页面,市场营销,移动应用程序,响应式,软件,软件登陆页面,启动,启动登陆页面,它都是完美的。

    Busiapp

    第20章 (20.Nonid)

    Nonid is a multi-concept SEO, Sofware, SaaS, Mobile app, Startup & Marketing landing page Vue Nuxt Template. It is build with Vue Js, Nuxt Js. Template is very easy to customize and fully responsive. It is best for your mobile app landing pages or businesses.

    Nonid是一个多概念SEO,Sofware,SaaS,移动应用程序,启动和营销着陆页Vue Nuxt模板。 它是用Vue Js,Nuxt Js构建的。 模板非常易于自定义,并且响应Swift。 最适合您的移动应用着陆页或企业。

    Nonid

    翻译自: https://vuejsexamples.com/20-best-landing-page-template-with-vuejs/

    vuejs登陆页面

    展开全文
  • 1.首选从多登陆页面开始 package pers.lbw.digitalmall.config; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Configuration; import org....

    1.首选从多登陆页面开始

    package pers.lbw.digitalmall.config;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.core.annotation.Order;
    import org.springframework.security.authentication.AuthenticationProvider;
    import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
    import org.springframework.security.config.annotation.web.builders.HttpSecurity;
    import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
    import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
    import org.springframework.security.core.userdetails.UserDetailsService;
    import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
    import org.springframework.security.web.authentication.AuthenticationFailureHandler;
    import org.springframework.security.web.authentication.AuthenticationSuccessHandler;
    import pers.lbw.digitalmall.services.impl.UserServiceImpl;
    
    @EnableWebSecurity
    @Configuration
    public class MultiHttpSecurityConfig {
    
    	@Configuration
    	@Order(1)
    	public static class ForeConfigurationAdapter extends WebSecurityConfigurerAdapter {
    		@Autowired
    		private AuthenticationSuccessHandler myAuthenticationSuccessHandler;
    		@Autowired
    		private AuthenticationFailureHandler myAuthenticationFailHandler;
    		@Autowired
    		private AuthenticationProvider authenticationProvider;  //注入我们自己的AuthenticationProvider
    		@Autowired
    		private LoginAuthenticationDetailsSource loginAuthenticationDetailsSource;
    
    		@Override
    		protected void configure(AuthenticationManagerBuilder auth) throws Exception {
    			auth.authenticationProvider(authenticationProvider);
    		}
    
    		protected void configure(HttpSecurity http) throws Exception {
    			http
    					.antMatcher("/fore/**")//多HttpSecurity配置时必须设置这个,除最后一个外,因为不设置的话默认匹配所有,就不会执行到下面的HttpSecurity了
    					.formLogin()
    					.loginPage("/fore/user/login")//登陆界面页面跳转URL
    					.loginProcessingUrl("/fore/user/loginPost")//登陆界面发起登陆请求的URL
    					.successHandler(myAuthenticationSuccessHandler)
    					.failureHandler(myAuthenticationFailHandler)
    					.authenticationDetailsSource(loginAuthenticationDetailsSource)
    					.permitAll()//表单登录,permitAll()表示这个不需要验证
    					.and()//Return the SecurityBuilder
    					.logout()
    					.logoutUrl("/fore/user/loginOut")//登出请求地址
    					.logoutSuccessUrl("/")
    					.and()
    					.authorizeRequests()//启用基于 HttpServletRequest 的访问限制,开始配置哪些URL需要被保护、哪些不需要被保护
    					.antMatchers("/user/**",  "/detail/toDetailPage*").permitAll()//未登陆用户允许的请求
    					.anyRequest().hasAnyRole("USER")//其他/fore路径下的请求全部需要登陆,获得USER角色
    					.and()
    					.headers().frameOptions().disable()//关闭X-Frame-Options
    					.and()
    					.csrf().disable();
    		}
    	}
    
    	@Configuration
    	@Order(2)
    	public static class AdminSecurityConfigurationAdapter extends WebSecurityConfigurerAdapter {
    		private final UserDetailsService userDetailsService;
    
    		public AdminSecurityConfigurationAdapter(UserServiceImpl userDetailsService) {
    			this.userDetailsService = userDetailsService;
    		}
    
    		@Override
    		protected void configure(AuthenticationManagerBuilder auth) throws Exception {
    			auth.userDetailsService(this.userDetailsService).passwordEncoder(new BCryptPasswordEncoder());
    		}
    
    		protected void configure(HttpSecurity http) throws Exception {
    			http
    					.antMatcher("/admin/**")
    					.formLogin()
    					.loginPage("/fore/user/login")//登陆界面页面跳转URL
    					.loginProcessingUrl("/fore/user/login111")//登陆界面发起登陆请求的URL
    					.defaultSuccessUrl("/manager/admin/index.html", true)
    					.failureUrl("/fore/user/login")//登陆失败的页面跳转URL
    					.permitAll()//表单登录,permitAll()表示这个不需要验证
    					.and()//Return the SecurityBuilder
    					.authorizeRequests()//启用基于 HttpServletRequest 的访问限制,开始配置哪些URL需要被保护、哪些不需要被保护
    					.antMatchers("/admin/**").hasAnyRole("ADMIN")//其他/fore路径下的请求全部需要登陆,获得USER角色
    					.and()
    					.csrf().disable();
    		}
    	}
    
    	@Configuration
    	@Order(3)
    	public static class OtherSecurityConfigurationAdapter extends WebSecurityConfigurerAdapter {
    		protected void configure(HttpSecurity http) throws Exception {
    			http
    					.authorizeRequests()//启用基于 HttpServletRequest 的访问限制,开始配置哪些URL需要被保护、哪些不需要被保护
    					.antMatchers("/","/code/**","/css/**", "/img/**", "/js/**").permitAll()//其他请求放行
    					.and()
    					.csrf()
    					.disable();//未登陆用户允许的请求
    		}
    	}
    }
    
    

    上面的代码先只讲多登陆页面配置:
    配置多个登陆页的方法已经在上面演示出,主要是通过写一个类MultiHttpSecurityConfig,然后在加上@EnableWebSecurity和@Configuration注解,其中多个HttpSecurity的配置是通过多个继承了WebSecurityConfigurerAdapter的静态内部类实现的,关于这个的具体说明:https://blog.csdn.net/qq_22771739/article/details/84308847
    https://blog.csdn.net/qq_22771739/article/details/84308908
    https://blog.csdn.net/qq_22771739/article/details/84308214
    ,如代码中所强调的:多HttpSecurity配置时必须设置这个,除最后一个外,因为不设置的话默认匹配所有,就不会执行到下面的HttpSecurity了

    2.登陆页面验证码和Restful

    为了实现验证码和Restful,我们得用我们自己的AuthenticationProvider,新建MyAuthenticationProvider继承AuthenticationProvider

    package pers.lbw.digitalmall.config;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.security.authentication.AuthenticationProvider;
    import org.springframework.security.authentication.BadCredentialsException;
    import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
    import org.springframework.security.core.Authentication;
    import org.springframework.security.core.AuthenticationException;
    import org.springframework.security.core.GrantedAuthority;
    import org.springframework.security.core.userdetails.UserDetailsService;
    import org.springframework.stereotype.Component;
    import pers.lbw.digitalmall.beans.AnyUser;
    
    import javax.annotation.Resource;
    import java.util.Collection;
    
    @Component
    public class MyAuthenticationProvider implements AuthenticationProvider {
    	/**
    	 * 注入我们自己定义的用户信息获取对象
    	 */
    	@Resource(name = "userServiceImpl")
    	private UserDetailsService userDetailService;
    
    	@Override
    	public Authentication authenticate(Authentication authentication) throws AuthenticationException {
    		String userName = authentication.getName();// 这个获取表单输入中返回的用户名;
    		String password = (String) authentication.getCredentials();// 这个是表单中输入的密码;
    		LoginWebAuthenticationDetails details = (LoginWebAuthenticationDetails) authentication.getDetails();//拿到表单的其他信息
    		String code = details.getCode();
    		String session_code = details.getSession_code();
    		System.err.println("userName:"+userName+"  password:"+password);
    		System.err.println("code:"+code+" session_code:"+session_code);
    		//判断验证码是否正确
    		if(session_code==null||!session_code.equalsIgnoreCase(code)){
    			throw new AuthenticationException("验证码错误!"){};
    		}
    		// 这里构建来判断用户是否存在
    		AnyUser user = (AnyUser) userDetailService.loadUserByUsername(userName); // 这里调用我们的自己写的获取用户的方法;
    		//判断密码是否正确
    		//实际应用中,我们的密码一般都会加密,以Md5加密为例,这里省略了
    		if(!user.getPassword().equals(password)){
    			throw new AuthenticationException("密码错误!"){};
    		}
    		Collection<? extends GrantedAuthority> authorities = user.getAuthorities();
    		// 构建返回的用户登录成功的token
    		return new UsernamePasswordAuthenticationToken(user, password, authorities);
    	}
    
    	@Override
    	public boolean supports(Class<?> authentication) {
    		// 这里直接改成retrun true;表示是支持这个执行
    		return true;
    	}
    }
    
    

    先看UserDetailsService 这个接口,这是一个security定义的接口,需要我们自己实现,功能是根据用户名查到数据库中对应的用户,如果没有就抛出UsernameNotFoundException就行 ,这是第一个异常,一共三个,后面我统一讲。我用UserServiceImpl实现了UserDetailsService,除了loadUserByUsername方法外,其他的都是我原来没有整合SpringSecurity时建立的,可以不用看。

    package pers.lbw.digitalmall.services.impl;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.security.core.authority.SimpleGrantedAuthority;
    import org.springframework.security.core.userdetails.UserDetails;
    import org.springframework.security.core.userdetails.UserDetailsService;
    import org.springframework.security.core.userdetails.UsernameNotFoundException;
    import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
    import org.springframework.stereotype.Service;
    import pers.lbw.digitalmall.beans.AnyUser;
    import pers.lbw.digitalmall.beans.User;
    import pers.lbw.digitalmall.dao.UserDao;
    import pers.lbw.digitalmall.services.UserService;
    
    import java.util.ArrayList;
    import java.util.List;
    
    @Service
    public class UserServiceImpl implements UserService,UserDetailsService {
    
    	@Autowired
    	UserDao ud;
    
    	@Override
    	public User login(User u) {
    		return ud.login(u);
    	}
    
    	@Override
    	public User register(User u) {
    		ud.register(u);
    		return ud.login(u);
    	}
    
    	@Override
    	public UserDetails loadUserByUsername(String s) throws UsernameNotFoundException {
    		User u = new User();
    		u.setUsername(s);
    		u = login(u);//登陆
    		if (u == null) {
    			throw new UsernameNotFoundException("用户名'" + s + "'未找到!");
    		}
    
    		List<SimpleGrantedAuthority> authorities = new ArrayList<>();
    		//对应的权限添加
    		if(u.getRole()==0){
    			authorities.add(new SimpleGrantedAuthority("ROLE_USER"));//注意一定要以ROLE_打头,另外一边就要写.hasRole("USER")
    		}else{
    			authorities.add(new SimpleGrantedAuthority("ROLE_ADMIN"));//注意一定要以ROLE_打头,另外一边就要写.hasRole("ADMIN")
    		}
    		//如果不为空构造一个认证user
    		AnyUser user=new AnyUser(u.getUsername(),u.getPassword(),authorities);
    		user.setId((long)u.getId());
    		user.setBirthday(u.getBirthday());
    		user.setEmail(u.getEmail());
    		user.setName(u.getName());
    		user.setNickname(u.getNickname());
    		user.setPhone(u.getPhone());
    		user.setPlace(u.getPlace());
    		user.setRole(u.getRole());
    		user.setSex(u.getSex());
    		user.setStreet(u.getStreet());
    		return user;
    	}
    }
    
    

    UserDetailsService 接口里面就一个抽象方法:loadUserByUsername,它的返回值是:UserDetails,这也是一个接口,我们需要创建实现类,org.springframework.security.core.userdetails.User实现了UserDetails,我们可以直接通过继承它来减少代码量,注意:这里至少得有id这个属性,而其他的属性都不是必须的,我写上去只是为了在用户登陆完成之后我在其他控制器能通过SecurityContextHolder.getContext().getAuthentication().getPrincipal();获取这个bean,然后从而拿到用户的信息,避免查询数据库。

    package pers.lbw.digitalmall.beans;
    
    import org.springframework.security.core.GrantedAuthority;
    import org.springframework.security.core.userdetails.User;
    
    import java.sql.Date;
    import java.util.Collection;
    
    /**
     * 自定义的 User 对象
     * 此 User 类不是我们的数据库里的用户类,是用来安全服务的
     */
    
    //import org.springframework.security.core.userdetails.User;
    public class AnyUser extends User {
    
    	private Long id;
    
    	private String name;
    
    	private String nickname;
    
    	private Integer sex;
    
    	private String phone;
    
    	private String email;
    
    	private Date birthday;
    
    	private Integer place;
    
    	private String street;
    
    	private Integer role;
    	public AnyUser(
    			String username,
    			String password,
    			Collection<? extends GrantedAuthority> authorities
    	) {
    		super(username, password, authorities);
    	}
    
    	public Long getId() {
    		return id;
    	}
    
    	public void setId(Long id) {
    		this.id = id;
    	}
    
    	public String getName() {
    		return name;
    	}
    
    	public void setName(String name) {
    		this.name = name;
    	}
    
    	public String getNickname() {
    		return nickname;
    	}
    
    	public void setNickname(String nickname) {
    		this.nickname = nickname;
    	}
    
    	public Integer getSex() {
    		return sex;
    	}
    
    	public void setSex(Integer sex) {
    		this.sex = sex;
    	}
    
    	public String getPhone() {
    		return phone;
    	}
    
    	public void setPhone(String phone) {
    		this.phone = phone;
    	}
    
    	public String getEmail() {
    		return email;
    	}
    
    	public void setEmail(String email) {
    		this.email = email;
    	}
    
    	public Date getBirthday() {
    		return birthday;
    	}
    
    	public void setBirthday(Date birthday) {
    		this.birthday = birthday;
    	}
    
    	public Integer getPlace() {
    		return place;
    	}
    
    	public void setPlace(Integer place) {
    		this.place = place;
    	}
    
    	public String getStreet() {
    		return street;
    	}
    
    	public void setStreet(String street) {
    		this.street = street;
    	}
    
    	public Integer getRole() {
    		return role;
    	}
    
    	public void setRole(Integer role) {
    		this.role = role;
    	}
    }
    
    

    讲完这个AnyUser后,我们来看MyAuthenticationProvider中的throw new UsernameNotFoundException(“用户名’” + s + “'未找到!”);和throw new AuthenticationException(“密码错误!”){};这两个异常,在加上我上面提及到的一个异常,一共三个,这个三个任意一个触发都成使程序进入myAuthenticationFailHandler,如果没有触发则进入myAuthenticationSuccessHandler,这两个等下在讲,现在来看MyAuthenticationProvider 类,

    String userName = authentication.getName();// 这个获取表单输入中返回的用户名;
    String password = (String) authentication.getCredentials();// 这个是表单中输入的密码;

    这两个api能获得前端表单里面账号和密码,但获取不到验证码,所以使用这个方法:
    https://blog.csdn.net/wzl19870309/article/details/70266939
    https://www.cnblogs.com/phoenix-smile/p/5666686.html
    ,所以得写两个类:

    package pers.lbw.digitalmall.config;
    
    import org.springframework.security.web.authentication.WebAuthenticationDetails;
    import pers.lbw.digitalmall.controllers.CodeController;
    
    import javax.servlet.http.HttpServletRequest;
    
    public class LoginWebAuthenticationDetails extends WebAuthenticationDetails {
    
    	private String code;
    
    	private String session_code;
    
    	public LoginWebAuthenticationDetails(HttpServletRequest request) {
    		super(request);
    		this.code = (String) request.getParameter("code");
    		this.session_code = (String) request.getSession().getAttribute(CodeController.codeSessionKey);
    	}
    
    	public String getCode() {
    		return code;
    	}
    
    	public void setCode(String code) {
    		this.code = code;
    	}
    
    	public String getSession_code() {
    		return session_code;
    	}
    
    	public void setSession_code(String session_code) {
    		this.session_code = session_code;
    	}
    }
    
    

    package pers.lbw.digitalmall.config;
    
    import org.springframework.security.authentication.AuthenticationDetailsSource;
    import org.springframework.security.web.authentication.WebAuthenticationDetails;
    import org.springframework.stereotype.Component;
    
    import javax.servlet.http.HttpServletRequest;
    
    @Component
    public class LoginAuthenticationDetailsSource implements AuthenticationDetailsSource<HttpServletRequest, WebAuthenticationDetails> {
    	@Override
    	public WebAuthenticationDetails buildDetails(HttpServletRequest context) {
    		return new LoginWebAuthenticationDetails(context);
    	}
    }
    
    

    注意要在对应的HttpSecurity http 对象中添加上这个.authenticationDetailsSource(loginAuthenticationDetailsSource)
    然后就是那两个Handler了,通过这两个Handler我们可以返回json数据,实现前后端分离

    package pers.lbw.digitalmall.config;
    
    import com.alibaba.fastjson.JSON;
    import org.springframework.security.core.Authentication;
    import org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler;
    import org.springframework.stereotype.Component;
    import pers.lbw.digitalmall.beans.JsonModel;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    
    @Component("myAuthenticationSuccessHandler")
    public class MyAuthenticationSuccessHandler extends SavedRequestAwareAuthenticationSuccessHandler {
    
    	@Override
    	public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication)
    			throws IOException, ServletException {
    		//什么都不做的话,那就直接调用父类的方法
    		//super.onAuthenticationSuccess(request, response, authentication);
    
    		//这里可以根据实际情况,来确定是跳转到页面或者json格式。
    		//如果是返回json格式,那么我们这么写
    		JsonModel jm = new JsonModel(200, "登陆成功", null, WebConfig.Host);
    		response.setContentType("application/json;charset=UTF-8");
    		response.getWriter().write(JSON.toJSONString(jm));
    
    		//如果是要跳转到某个页面的,比如我们的那个whoim的则
    		//new DefaultRedirectStrategy().sendRedirect(request, response, "/whoim");
    	}
    }
    
    
    package pers.lbw.digitalmall.config;
    
    import com.alibaba.fastjson.JSON;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.http.HttpStatus;
    import org.springframework.security.core.AuthenticationException;
    import org.springframework.security.web.authentication.SimpleUrlAuthenticationFailureHandler;
    import org.springframework.stereotype.Component;
    import pers.lbw.digitalmall.beans.JsonModel;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.util.HashMap;
    import java.util.Map;
    
    //登录失败的
    @Component("myAuthenticationFailHandler")
    public class MyAuthenticationFailHandler extends SimpleUrlAuthenticationFailureHandler {
    	@Override
    	public void onAuthenticationFailure(HttpServletRequest request, HttpServletResponse response,
    	                                    AuthenticationException exception) throws IOException {
    		//以Json格式返回
    		JsonModel jm = new JsonModel(0, exception.getMessage(), null, "/fore/user/login");
    		response.setContentType("application/json;charset=UTF-8");
    		response.addHeader("X-Frame-Options","SAMEORIGIN");//SAMEORIGIN:页面只能被本站页面嵌入到iframe或者frame中;
    		PrintWriter writer = response.getWriter();
    		writer.write(JSON.toJSONString(jm));
    		writer.flush();
    	}
    }
    
    

    在给出一个详情的关于springboot 集成 spring security的博文:
    https://blog.csdn.net/qq_22771739/article/details/82010646

    展开全文
  • 记得之前连接i-Shanghai时都能自动弹出登陆页面,但是最近使用时,虽然登陆页面能够弹出,但是该页面并不能正常打开。 检查了一下,原来是因为之前设置了DNS,导致域名解析失效。 解决步骤如下: 在网络设置中,...

    记得之前连接i-Shanghai时都能自动弹出登陆页面,但是最近使用时,虽然登陆页面能够弹出,但是该页面并不能正常打开。
    检查了一下,原来是因为之前设置了DNS,导致域名解析失效。
    解决步骤如下:

    1. 在网络设置中,删掉自定义的DNS配置并保存。
    2. 断开i-Shanghai
    3. 重新连接i-Shanghai
    展开全文
  • 如题,可以跳转到登陆页面,也可以登陆,但是登陆处理的action为什么没有用到?? 还登陆上去了 ![图片说明](https://img-ask.csdn.net/upload/201704/01/1491044896_997257.jpg)
  • bootstrap-login-forms.zip bootstrap-login-forms.zip bootstrap 免费登陆页面、登陆表单(共三款)
  • JavaScript—简单实现登陆页面

    万次阅读 2019-02-03 11:46:05
    开发工具与关键技术:DW/浏览器 ;简单使用jquery。 作者:刘佳明 ...下面是我个人在之前所完成的一个登陆页面; 其中,要完成一个登陆页面的实现,是在将用户的信息填写是JavaScript中的点击登陆对...

    开发工具与关键技术:DW/浏览器 ;简单使用javascript。
    作者:刘佳明
    撰写时间:2019年 2 月 3 日

    本篇为大家呈现一个简单的页面登陆;

    要实现一个登陆的页面主要的构造在这为大家简单阐述一下;
    主要的css样式构造就不多说;现网络是的登陆页面也是五花八门;下面是我个人在之前所完成的一个登陆页面;
    在这里插入图片描述

    其中,要完成一个登陆页面的实现,是在将用户的信息填写是JavaScript中的点击登陆对信息的正确与否来进行判断;
    当前登陆页面的判断会出现以下情况;

    1. 只输入用户名;
      输入用户名错误时效果;

    在这里插入图片描述
    弹出一个提示框;
    alert(“您填写的用户名或密码有误,请在输入一遍”)

    当输入的用户名正确时的效果;
    在这里插入图片描述
    弹出一个提示框 提示你用户输入正确,但密码未填写;
    alert(“您的密码不能为空”);

    2.只输入密码时;

    输入密码错误时效果;
    在这里插入图片描述
    弹出一个提示框;
    alert(“您填写的用户名或密码有误,请在输入一遍”)

    当输入的密码正确时的效果;
    在这里插入图片描述
    弹出一个提示框 提示你密码输入正确,但用户未填写;
    alert(“您的用户不能为空”);

    1. 当输入者两者都未填写,直接点击登陆时;效果如下;
      在这里插入图片描述
    2. 当登陆者用户名与密码都输入正确时;将会实现一个页面的跳转;效果如下
      在这里插入图片描述
      其中,跳转的这个页面是我个人闲时完成的;各位看官也可以自己创始;

    以下为大家附属JavaScript处的代码

    <script>
    	function myFunction(){
    		var x = document.getElementById("demo").value;
    		var z=document.getElementById("name").value;
    		var y = document.getElementById("damo");
    		
    		/*console.log(z);*/
    			/*alert('恭喜发财')*/
    		if(x==""&&z==""){
    				alert("表格内不能为空");
    					}
    		else{
    			if(x=="123456"&&z=="my"){
    			
    				y.href = "图片查看/project.html";
    			
    				}
    				else if(x==""&&z=="my"){
    
    					alert("您的密码不能为空");
    				
    				}
    				else if(x=="123456"&&z==""){
    
    					alert("您的用户名不能为空");
    				
    				}
    			else{
    				alert("您填写的用户名或密码有误,请在输入一遍")
    			}
    		}
    		
    	}
    	</script>
    
    展开全文
  • web前端的登陆页面制作

    千次阅读 2019-08-18 14:19:01
    web前端的登陆页面制作 登陆页面中有要登陆系统(网站)的名称,输入账号密码的输入框,以及登陆按钮这几个重要部分,其余的可以随便添加,但是页面布局要合理 标陆页面题在页面输入框之前的图像是特殊的字体,...
  • 各位大神 我是一个新手,我希望... 我在写一个页面 那个页面跳到下一个页面时候需要验证是否登陆过,没有登陆直接返回登陆页面。如果登陆过了 就可以进去。能教教我吗。最好能详细点。我知道这个思路,不知道怎么实现。
  • odoo12 - 登陆页面

    千次阅读 2019-08-30 17:40:38
    模块地址:... 网络搬运整理odoo12登陆页面模块,根据时间改变登陆页面 Change Background by Hours ========================== Night (from 0h -> 3h and 18h -> 23h): ---------...
  • 基于安卓开发的QQ登陆页面,实现登陆注册内容(一) QQ登陆注册 首先对于QQ登陆注册而言,先控制好布局,和对控件的使用; 页面效果如下: 部分代码: <TextView android:layout_width="match_parent" ...
  • 360WIFI登陆页面地址

    2019-09-19 00:31:47
    360WIFI登陆页面地址:http://192.168.0.1/init/pc_index.html 转载于:https://my.oschina.net/rootleecc/blog/...
  • 登陆页面,提交信息,匹配数据库,提示登录成功或失败
  • Web前端 简单登陆页面设计 代码

    万次阅读 多人点赞 2019-04-21 17:00:27
    HTML部分 <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>登陆页面</title> <link rel="stylesheet"href="css/new_file.css"type=...
  • 拦截器里面跳转到一个错误页面,错误页面再加下面的js代码,跳转到登陆页面 window.parent.location.href = "登陆页面URL"; window.top.location.href = "登陆页面URL";
  • 前台html页面5分钟不做任何操作 就返回登陆页面 ,求大佬给一个demo 谢谢了
  • 我把Jeecg项目的源码下载下来了,然后前后端分离,同时跑了起来,前端用的webstorm,后端使用的是Idea,同时运行之后呢,前端有显示登陆页面,但是却登陆不了,如图显示![图片说明]...
  • 避免在iframe中嵌套登陆页面

    千次阅读 2019-09-16 10:35:28
    我们会使用iframe结构来显示设置的页面内容,但如果当后台用户长时间未使用后台时,导致session已经消除,这时如果后台用户还想基于原来的页面做操作时,就会出现本来应该显示设置的页面内容出现了登陆页面,登陆...
  • 使用场景,当一个登陆页面登陆时输入的账号或者密码错误时清除Cookie;另一种场景当用户退出的时候,清除Cookie,即使勾选的自动登陆,退出了系统,下次登陆就必须重写输入账号和密码。登陆时处理在请求方式的方法内...
  • websphere登陆页面访问出现错误,错误如下: A communication error occurred: "Operation timed out" The Web Server may be down, too busy, or experiencing other problems preventing it from responding to...
  • Form表单做登陆页面

    千次阅读 2015-08-07 09:47:14
    登陆页面 用户名: 密  码: 显示效果:
  • 很久之前就想去配置一个非单页面的登陆页面,一直到今天才完成 我将给出最简单的代码,完成最基本的配置。需要更强的功能自己去加上 效果如下 第一步:创建登陆页面的文件 1-1:login.html <!DOCTYPE html>&...
  • 我在linux用PhantomJS端做访问淘宝页面的低频爬虫,一段时间之前都能正常运行,但是一段时间之后,链接总会自动跳转到淘宝的登陆页面,请问下怎么绕过这个登录页面
  • 登陆页面实现保存帐号密码功能

    万次阅读 2014-05-20 23:23:32
    1.登陆页面如下: 每个字段对应的属性name如下表: 用户帐号 name 登陆密码 password 验证码 checkNum 记住我 rememberMe 2.Action中的处理如下: 在用户第一次登陆后...
  • swift 实现一个登陆页面

    千次阅读 2017-07-27 10:12:59
    一般的登陆页面要实现用户名密码的输入,登陆按钮实现登陆,点击输入框的时候键盘弹起,还有可能要实现输入框坐标的变化,如图 该界面是用XIB实现的,输入框的代理如下 extension CGLoginController_iPad{ ...
  • Nginx配置两个tomcat,但是登陆的时候一直重读登陆页面。 ![图片说明](https://img-ask.csdn.net/upload/201606/08/1465394575_229323.png)
  • JSP实现登陆页面(表单提交、连接数据库、实现页面跳转) 1.数据库设计 2.主页面展示 3.代码展示: index.jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <...
  • Springboot整合SpringSecurity 02-...但是使用的是SpringSecurity自带的登陆页面,通常开发中我们肯定是要使用自己的登陆页面的。 所以本章我们继续学习使用自定义的登陆页面。 代码和配置接着上一章。 1.创建一个...
  • 项目中登陆页面的显示

    千次阅读 2014-04-26 10:21:26
    一般在项目中WebContent目录下中有个index.jsp页面,里面也就一句话,用于登陆页面的显示。 第一种方式的首页内容如下: struts的xml文件配置如下: /WEB-INF/jsp/Login.jsp action的内容: public ...
  • 首先主页面就是登陆页面也就是login.jsp 当用户提交登陆信息后提交到servlet与javabeans中的数据库操作进行检验,这部分操作就不谈了,如果匹配跳转到登陆成功后的页面,否则弹窗并跳转回到登陆页面,因为此时是在...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 27,565
精华内容 11,026
关键字:

登陆页面