精华内容
下载资源
问答
  • 登录页面HTML代码

    2018-05-30 16:07:07
    登录页面代码登录页面代码登录页面代码登录页面代码登录页面代码登录页面代码
  • 一、formLogin的应用场景在本专栏之前的文章中,已经给大家介绍过Spring Security的HttpBasic模式,该模式比较简单,只是进行了通过携带Http的Header进行简单的...这就需要Spring Security支持我们自己定制登录页面...

    30de4fcef9641633e1e61ecc396bbdcd.png

    一、formLogin的应用场景

    在本专栏之前的文章中,已经给大家介绍过Spring Security的HttpBasic模式,该模式比较简单,只是进行了通过携带Http的Header进行简单的登录验证,而且没有定制的登录页面,所以使用场景比较窄。对于一个完整的应用系统,与登录验证相关的页面都是高度定制化的,非常美观而且提供多种登录方式。这就需要Spring Security支持我们自己定制登录页面,也就是本文给大家介绍的formLogin模式登录认证模式。

    准备工作

    • 新建一个Spring Boot 的web应用,引入Spring Security Starter。
    • 准备一个login.html登录页面,页面内容非常简单,一个from表单、用户名和密码输入框,一个提交按钮
    • 准备一个首页index.html,在登录成功之后需要进入index.html首页
    • 首页可以看到syslog(日志管理)、sysuer(用户管理)、biz1(业务一)、biz2(业务二)四个页面超文本链接选项。通过controller控制层跳转页面,并在对应页面写一些标志性文字即可,不需写具体业务。

    需求

    • 我们希望biz1(业务一)、biz2(业务二)普通的操作用户user就可以访问
    • 我们希望管理员可以访问包括syslog(日志管理)和sysuser(用户管理)在内的所有资源

    以上就是本文介绍formLogin模式需要进行的准备工作及需求,下面我们就来实现其中的核心的登录验证逻辑,准备工作非常简单请自行实现。(新建spring boot应用,登录页面、首页、四个业务页面都写成非常简单的html即可,不用写实际业务和样式。)

    二、说明

    formLogin模式的三要素:

    • 登录验证逻辑
    • 资源访问控制规则,如:资源权限、角色权限
    • 用户信息

    一般来说,使用权限认证框架的的业务系统登录验证逻辑是固定的,而资源访问控制规则和用户信息是从数据库或其他存储介质灵活加载的。但本文所有的用户、资源、权限信息都是代码配置写死的,旨在为大家介绍formLogin认证模式,如何从数据库加载权限认证相关信息我还会结合RBAC权限模型再写文章的。

    三、实现formLogin模式基础配置

    首先,我们要继承WebSecurityConfigurerAdapter ,重写configure(HttpSecurity http) 方法,该方法用来配置登录验证逻辑。请注意看下文代码中的注释信息。

    @Configuration
    public class SecurityConfig extends WebSecurityConfigurerAdapter {
    
        @Override
        protected void configure(HttpSecurity http) throws Exception {
            http.csrf().disable() //禁用跨站csrf攻击防御,后面的章节会专门讲解
                .formLogin()
                    .loginPage("/login.html")//用户未登录时,访问任何资源都转跳到该路径,即登录页面
                    .loginProcessingUrl("/login")//登录表单form中action的地址,也就是处理认证请求的路径
                    .usernameParameter("uname")///登录表单form中用户名输入框input的name名,不修改的话默认是username
                    .passwordParameter("pword")//form中密码输入框input的name名,不修改的话默认是password
                    .defaultSuccessUrl("/index")//登录认证成功后默认转跳的路径
                    .and()
                .authorizeRequests()
                    .antMatchers("/login.html","/login").permitAll()//不需要通过登录验证就可以被访问的资源路径
                    .antMatchers("/biz1").hasAnyAuthority("biz1")  //前面是资源的访问路径、后面是资源的名称或者叫资源ID
                    .antMatchers("/biz2").hasAnyAuthority("biz2")
                    .antMatchers("/syslog").hasAnyAuthority("syslog")
                    .antMatchers("/sysuser").hasAnyAuthority("sysuser")
                    .anyRequest().authenticated();
        }
        
    }

    上面的代码分为两部分:

    • 第一部分是formLogin配置段,用于配置登录验证逻辑相关的信息。如:登录页面、登录成功页面、登录请求处理路径等。
    • 第二部分是authorizeRequests配置端,用于配置资源的访问权限。如:开发登录页面的permitAll开放访问,“/biz1”(业务一页面资源)需要有资源ID为"biz1"的用户才可以访问。

    这时候,我们通过浏览器访问,随便测试一个没有访问权限的资源,都会跳转到login.html页面。

    11253e2a05138d8d9d652e2a924a8eb6.png

    四、实现资源访问限制的需求

    在上文中,我们配置了登录验证及资源访问的权限规则,我们还没有具体的用户,下面我们就来配置具体的用户。重写WebSecurityConfigurerAdapter的 configure(AuthenticationManagerBuilder auth)方法

    public void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.inMemoryAuthentication()
            .withUser("user").password(passwordEncoder().encode("123456")).authorities("biz1","biz2")
            .and()
            .passwordEncoder(passwordEncoder());//配置BCrypt加密
    }
    
    @Bean
    public PasswordEncoder passwordEncoder(){
        return new BCryptPasswordEncoder();
    }
    • inMemoryAuthentication指的是在内存里面存储用户的身份认证和授权信息。
    • withUser("user")用户名是user
    • password(passwordEncoder().encode("123456"))密码是加密之后的123456
    • authorities("biz1","biz2")指的是user用户拥有资源ID为biz1(业务一)和biz2(业务二)资源的权限

    这样,我们就实现了文首提出的普通用户只能访问biz1(业务一)和biz2(业务二)资源的需求。那么管理员用户可以访问所有的资源的配置方式,你会不会呢?同样的配方、同样的方式、自己可以尝试一下哦!

    五、静态资源访问

    在我们的实际开发中,登录页面login.html和控制层Controller登录验证'/login'都必须无条件的开放。除此之外,一些静态资源如css、js文件通常也都不需要验证权限,我们需要将它们的访问权限也开放出来。下面就是实现的方法:重写WebSecurityConfigurerAdapter类的configure(WebSecurity web) 方法

       @Override
        public void configure(WebSecurity web) {
            //将项目中静态资源路径开放出来
            web.ignoring().antMatchers("/config/**", "/css/**", "/fonts/**", "/img/**", "/js/**");
        }
    

    期待您的关注

    • 博主最近新写了一本书:《手摸手教您学习SpringBoot系列-16章97节》
    • 本文转载注明出处(必须带连接,不能只转文字):字母哥博客。
    展开全文
  • 并且返回登录页login.html以下是thinkphp触发器login代码在试图文件夹view下面创建login.html文件即applicationindexview你的控制器名login.html以下是login.html代码效果图数据库中建立一个User用户表thinkPHP连接...

    简单登录页

    只做最简单的表单就足够实现了

    在你的控制器下面做一个触发器login,并且返回登录页login.html

    dc14c86dc8e19e1529d44e541310a669.png

    以下是thinkphp触发器login代码

    599067f07b309ec934d444418c3735a4.png

    在试图文件夹view下面创建login.html文件

    即applicationindexview你的控制器名login.html

    以下是login.html代码

    1d3dacbaa38c21e23f55987617cd278d.png

    效果图

    60600e52946566d9c3431fa24accbf57.png

    数据库中建立一个User用户表

    thinkPHP连接好数据库,建一个用户表(就是放账号密码的),以下我用名字为User表做的示范,并且一个字段为username,一个字段为password,并且随便输入一些数据,例如username=123,password=123,即相当于创建一个用户。

    427372fd6661fe5f8e53849124f2bc83.png

    做一个yanzheng触发器,验证登录账号密码是否正确

    如您不想使用session的,可以把所有关于session的代码去掉

    代码的具体注释已经在下面代码中

    dd743aaeb6085adbb424a17d7084cc24.png


    进行登录测试,效果图如下

    输入账号:123,密码:123,点击登录,显示登录成功

    697e5f36ec855daa164550b910db8b40.png

    3a5a1795071323a5a628713366e66bde.png


    简单session拦截

    因为有session,所以每次登录成功后,都会创建一个临时文件,用来判断是否已经登录过,所以刚刚上面yanzheng触发器下的代码就有session的作用,即

    4a20cc6e238417f795d9f0813465ba9a.png


    那么如果用到了session,就要进行session的拦截,即如果还没登录账号密码的,禁止未经登录就直接可以进入到加密的后台页中

    假设你的后台页面为test1.html,以下是代码

    d702af091013c6cc88e2ffe8829809ef.png

    效果图就是

    a3ba518c6b231f95f220ab8de722725b.png

    假设你的后台页面触发器为test1,以下是代码

    代码的具体注释全部在下面代码里面

    234ff62b31ec05465f63ab97661e46b7.png

    最后进行测试,你会发现你如果没有登录过,是不可能进入到test1后台页面中的因为session的拦截作用。那么项目也就完成了哟!

    如果对您有帮助,可以顺手点个赞哟

    #前端# #网站#

    展开全文
  • 以下是thinkphp触发器login代码在试图文件夹view下面创建login.html文件即applicationindexview你的控制器名login.html以下是login.html代码效果图数据库中建立一个User用户表thinkPHP连接好数据库,建一个用户表...

    简单登录页

    只做最简单的表单就足够实现了

    在你的控制器下面做一个触发器login,并且返回登录页login.html.

    678bf8e4d759b4fe1e627b962578d694.png

    以下是thinkphp触发器login代码

    62203d1ec34bd706c7861c64520806be.png

    在试图文件夹view下面创建login.html文件

    即applicationindexview你的控制器名login.html

    以下是login.html代码

    d61f2517b2e1d2709ee1db62beca1f59.png

    效果图

    19bd8ddc257c6cf71d970c9182425d85.png

    数据库中建立一个User用户表

    thinkPHP连接好数据库,建一个用户表(就是放账号密码的),以下我用名字为User表做的示范,并且一个字段为username,一个字段为password,并且随便输入一些数据,例如username=123,password=123,即相当于创建一个用户。

    95c79b9e58d8abc801e5d07f8daa6d56.png

    做一个yanzheng触发器,验证登录账号密码是否正确

    如您不想使用session的,可以把所有关于session的代码去掉

    代码的具体注释已经在下面代码中

    0e93ad7ee555a7225be26e421defa5f8.png

    进行登录测试,效果图如下

    输入账号:123,密码:123,点击登录,显示登录成功

    9c481aa0fabf7f27b26e5accb65d4493.png
    6437dfc9c1e8245376c612e3afd17330.png

    简单session拦截

    因为有session,所以每次登录成功后,都会创建一个临时文件,用来判断是否已经登录过,所以刚刚上面yanzheng触发器下的代码就有session的作用,即

    abf639fc883b10f4729af3fd50719822.png

    那么如果用到了session,就要进行session的拦截,即如果还没登录账号密码的,禁止未经登录就直接可以进入到加密的后台页中

    假设你的后台页面为test1.html,以下是代码

    f845ab2fa97e4a9919b9fa10a8a7e1a3.png

    效果图就是

    96261ea08067f5563cfdb228ec8930c4.png

    假设你的后台页面触发器为test1,以下是代码

    代码的具体注释全部在下面代码里面

    31ca14ea5afee0441321006165409c79.png

    最后进行测试,你会发现你如果没有登录过,是不可能进入到test1后台页面中的因为session的拦截作用。那么项目也就完成了哟!

    如果对您有帮助,可以顺手点个赞哟

    #前端# #网站#

    展开全文
  • Django 其实有自己的权限认证组件,可以拿来用,其实本身代码量也不多,还是自己写吧。新建了一个functions文件夹用于存放各种功能文件:说说登录的原理吧,企业中一般使用AD作为认证源,微软域服务本身只有Windows...

    c0e3c0f42aa66926e7e53a3e1d7c549d.png

    今年的天气特别的冷,于是,继续缓慢更新。

    Django 其实有自己的权限认证组件,可以拿来用,其实本身代码量也不多,还是自己写吧。

    新建了一个functions文件夹用于存放各种功能文件:

    0ce12947bc66e8c202dd639237655d68.png

    说说登录的原理吧,企业中一般使用AD作为认证源,微软域服务本身只有Windows系统可用,但非Windows可以使用ldap协议来进行认证,这里需要用到的库ladp3,在functions文件夹中新建publicldaplogin.py文件。功能代码如下:

    from ldap3 import Server,Connection,SIMPLE,SYNC,ALL,SASL,NTLM,SUBTREE,ALL_ATTRIBUTES,ALL_OPERATIONAL_ATTRIBUTES
    import time
    
    s = Server('10.210.12.17',get_info=ALL)
    
    def login(username,password):
        c = Connection(s, user='head.yst%s'%username, password=password, authentication=NTLM)
        if not c.bind():
            result = {'result':'False'}
            return result
        else:
            c.search(search_base='dc=head,dc=yst',
                     search_filter='(anr={})'.format(username),
                     search_scope=SUBTREE,
                     attributes=['displayName','title'],
                    #  attributes=ALL_ATTRIBUTES
                     )
            result = {
                'result':'Success',
                'username':username,
                'fullname':str(c.entries[0]).split('n')[1].split(':')[1].lstrip(),
                'logintime':time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))}
            return result

    代码末尾加上print(login('xcwang','password123'))我们来运行脚本,xcwang和password123对应的正是ad的用户名密码,得到以下结果:

    {'result': 'Success', 'username': 'xcwang', 'fullname': '王小川', 'logintime': '2020-10-30 10:00:08'}

    功能测试正常,删除最后一行,登录功能组件就写完了,

    但是需要在平台中使用起来,还需要一些工作,登录脚本只是满足了去验证用户身份的功能,用户成功登录后,我们应该设置一个令牌给到用户,拿到令牌的用户,可以在系统中进行各种被允许的操作。

    所以,我们需要一个给用户发令牌的功能,functions中新建public_token_auth.py

    import time
    import jwt
    
    #用户通过此脚本获取到token
    def get_token(username, key):
        token_dict={
            'time':time.time(),
            'name':username
        }
        headers ={
            'alg':"HS256"
        }
        jwt_token=jwt.encode(token_dict,
        key,
        algorithm="HS256",
        headers=headers).decode()
        return jwt_token
    
    #对用户的token进行认证,确保是我们之前发出去的
    def dec_token(token_key,key):
        try:
            data = jwt.decode(token_key, key , algorithms=['HS256'])['name']
            return data
        except Exception as e:
            return e

    验证token功能呢,如下:

    末尾加上print(get_token('abc','123')),然后运行
    eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ0aW1lIjoxNjA0MDI0NjkzLjQzNDE2NiwibmFtZSI6ImFiYyJ9.0GSfXloR9Y7O9OD3wD-33ErotX58U13_dCOJ7BcMe_8
    
    将末尾的print改成print(dec_token('eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ0aW1lIjoxNjA0MDI0NjkzLjQzNDE2NiwibmFtZSI6ImFiYyJ9.0GSfXloR9Y7O9OD3wD-33ErotX58U13_dCOJ7BcMe_8','123'))
    再次运行,得到的结果为abc即可

    验证完成后记得删除多余代码,接着回到views.py,

    from django.shortcuts import render,redirect
    from functions import public_ldap_login,public_token_auth
    
    
    def login(request):
        #token的获取使用key'abcd.com.cn'
        if request.method == 'POST':
            #获取用户POST上来的用户名和密码
            un = request.POST.get('username')
            pd = request.POST.get('password')
    
            #判断用户名密码为非空,如果为空,则返回消息和login页面
            if un == '' or pd == '':
                res = render(request, 'login.html', context={'result':'用户名密码不能为空!'})
                return res
            
            #获取登录结果
            login_result = public_ldap_login.login(un,pd)
    
            #如果登录结果为false则返回页面和登录失败消息。
            if login_result['result'] == 'False':
                res = render(request, 'login.html', context={'result':'登陆失败,用户名密码错误,请检查!'})
                return res
            
            #如果登录成功则执行以下操作
            else:
                #如果session key中包含'login_from‘字段,则表示用户是从其它页面跳转到login的
                if 'login_from' in request.session.keys():
                    #则为用户准备以下资源:1、跳转到login_from定义的页面,设置token,username,fullname,logintime的cookie
                    res = redirect(request.session['login_from'])
                    res.set_cookie('token',public_token_auth.get_token(un,'abcd.com.cn'),max_age=36000)
                    res.set_cookie('username', un,max_age=36000)
                    res.set_cookie('fullname',login_result['fullname'],max_age=36000)
                    res.set_cookie('logintime',login_result['logintime'],max_age=36000)
                    res.set_cookie('result','Success',max_age=36000)
                    return res
                #如果session ky中不包含login_from字段,则直接返回login.html,并要求重新登录
                else:
                    return render(request,'login.html')
        
        #如果使用非POST非GET的请求方法,则直接返回login页面,要求强制登录
        else:
            return render(request,'login.html')
    
    
    #下面定义个装饰器函数,一方面,实现登录逻辑,另外其它页面函数也方便调用。
    def login_auth(fouc):
        def wrapper(request,*args,**kwargs):
            cookie_get = request.COOKIES #获取用户cookie
            user_path = request.path #获取用户访问的path,非常重要!!
    
            #如果未曾认证,或cookie不完整,则直接重定向到login页面
            if 'token' not in cookie_get or 'username' not in cookie_get or cookie_get['username'] != public_token_auth.dec_token(cookie_get['token'],'abcd.com.cn') and user_path != '/login/': 
                #设置request.session['login_from']为user_path!!
                request.session['login_from'] = user_path  
                return redirect('/login/')  
                # 此时用户的request.session中已经包含了user_path,登录成功后,可直接跳转至登录之前的页面
            #如果用户跳转到login页面之前的页面就是/login/,则直接返回login.html
            elif user_path == '/login/':
                request.session['login_from'] = '/'
                return render(request,'login.html')
            else:
                return fouc(request,*args,**kwargs)
        return wrapper
    
    
    @login_auth
    def index(request):
        return render(request,'index.html')
    
    
    @login_auth
    def infosearch(request):
        return render(request,'infosearch.html')
    
    

    结果验证:

    打开http://127.0.0.1,将会被重定向至login页面,输入正确的ad用户名密码后,将直接跳转至主页,输入错误的用户名密码或不输入直接点击登录,会有相应的错误提示。

    删除cookie直接尝试访问http://127.0.0.1/infosearch 会被重定向至登录页面,输入正确的用户名密码后,自动跳转至infosearch页面。

    再来梳理一下,登录组件逻辑:

    1、尝试获取用户cookie和访问路径;
    2、如果用户未认证,则重定向到login函数进行处理(处理步骤在下面);
    3、如果用户的访问路径为‘/login’,则直接返回login.html页面
    4、如果2、3都没有匹配到,则正常执行用户的请求。

    login函数处理用户请求逻辑:
    如果用户是通过POST发送登录信息,则处理用户登录,并将结果写入到用户cookie;
    其它情况一律返回login.html,要求登录。

    今天先到这里,后面将继续更新。

    展开全文
  • 上述代码的登录函数中,当用户输入正确的用户名和密码后,程序将有两个可选的重定向路径,一个是用户之前访问的路径,这可以通过request.args.get()来访问其中的next而得到,另一个是如果用户直接访问了登录页面,则...
  • HTML>简单登录页面代码

    万次阅读 多人点赞 2016-12-06 10:18:50
    简单登录HTML
  • HTML5登录页面是一款采用电子邮件跟密码的网站登录页面代码下载。
  • HTML163网易邮箱登录页面代码 input标签
  • 登录页面html代码

    2014-05-21 15:58:33
    应用html 编写登录页面,涉及web服务器的登录与数据库的查找
  • 2套优质的登录页面html代码,可以参考下,可以节省开发的时间,真的要用完美来形容。干货,良心推荐
  • login.html我们在此页面对我们的表单内容做了JS判断对表单做了css布局放入了我们yanzhengma.php,验证码文件html>登陆界面functionfoo(){if(myform.name.value==""){alert("请输入用户名");myform.name.focus();...
  • html简单登录页面代码

    万次阅读 2018-06-16 10:18:58
    图片必须是在Imges下的否则显示不出来(复制代码的话把图片换成你的图片就好了) 代码如下 <html> <head> <title>tes
  • 登录注册HTML页面代码

    千次阅读 2021-01-06 17:29:23
    创建register.html文件,录入如下代码 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <style type="text/css"> form { width:100%;
  • 登录页面代码(html+css).zip
  • 登录页面HTML代码https://www.w3schools.com/howto/howto_css_login_form.asp​www.w3schools.com如何实现登录验证?HTTP的验证的方式:1.HTTP Basic认证 2.HTTP基于Session的认证3.HTTP基于Token的认证Web认证那些...
  • 登录页 login Build Setup # install dependencies npm install # serve with hot reload at localhost:8080 npm run dev # build for production with minification npm run build # build for production ...
  • 登录页面代码

    2019-09-21 00:15:56
    <!DOCTYPE html><...登陆页面</title><head><meta charset="UTF-8"><title>Insert title here</title></head><body><form name = logon ...
  • 这篇文章主要为大家详细介绍了Html制作简单而漂亮的登录页面具体代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下先来看看样子。html源码:复制内容到剪贴板LoginLogin登录css代码:CSS Code复制内容到剪贴...
  • 登录页面代码

    2020-05-14 16:06:38
    登录页面代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>撩课-喜欢IT,就上撩课(itlike.com)</title> <link rel="shortcut icon" ...
  • HTML5Canvas知乎登录页面动态线条背景动画代码
  • 登录页面代码html

    千次阅读 2016-08-13 14:38:57
    DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title></title> <meta name="viewport" content="width=device-width, initial-scale=1.0"...
  • 几乎每个网站都会有登录页面,那你知道如何写HTML登录页面吗?这篇文章就和大家分享一个HTML简单登录界面的代码,有一定的参考价值,感兴趣的朋友可以看看。实例:制作一个HTML登录页面,包含邮箱,登录密码,立即...
  • html5星空背景的登录页面带粒子特效代码帮运工一枚,仅供学习,不供商用
  • 网易邮箱登录      免费邮 企业邮 VIP邮箱 帮助                  163/126/yeah三大免费邮箱均默认开放  全面支持iPhone/iPad及Android等系统  客户端、手机与网页,实现发送...
  • html5+css3登录注册表单切换页面代码.zip

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,396
精华内容 1,358
关键字:

登录页面html代码