文档章节

java_web用户的自动登录模块的实现

J
 Java编程思想
发布于 2014/08/22 18:34
字数 2603
阅读 71
收藏 2


javaBean的代码

 

package bean;
 
import java.io.Serializable;
 
public class Admin implements Serializable{
     
    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    private Integer id;
    private String name;
    private String pass;
 
    public Admin() {
        super();
        // TODO Auto-generated constructor stub
    }
 
    public Admin(Integer id, String name, String pass) {
        super();
        this.id = id;
        this.name = name;
        this.pass = pass;
    }
 
    public Integer getId() {
        return id;
    }
 
    public void setId(Integer id) {
        this.id = id;
    }
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    public String getPass() {
        return pass;
    }
 
    public void setPass(String pass) {
        this.pass = pass;
    }
 
    @Override
    public String toString() {
        return "AdminBean [id=" + id + ", name=" + name + ", pass=" + pass
                + "]";
    }
 
}



dao的基础接口类

 

package dao;
 
import java.util.List;
 
public interface BaseDao<T, PK> {
    /**
     * 插入数据
     */
    boolean insert(T entity);
 
    /**
     * 根据实体删除数据
     */
    boolean delete(T entity);
 
    /**
     * 根据ID删除数据
     */
    boolean deleteById(PK id);
 
    /**
     * 修改数据
     */
    boolean update(T entity);
 
    /**
     * 查询所有数据
     */
    List<T> findAll();
 
    /**
     * 根据ID查询数据
     */
    T findById(PK id);
 
    /**
     * 根据当前页查询数据
     */
    List<T> findNowPageInfo(int nowpage, int pagesize,String sortName,String sortOrder);
 
    /**
     * 返回总页数
     */
    Integer getCountPage(int pagesize);
 
    /**
     * 批量删除
     */
 
    boolean deletes(Object ids[]);
 
}



对admin操作的接口类,继承自basedao

 

package dao;
 
import bean.Admin;
 
public interface AdminDao extends BaseDao<Admin, Integer> {
    Admin checkLogin(String name,String pass);
    Admin checkLogin(String name);
     
}



dao操作实体的实现类

 

package daoImpl;
 
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
 
import util.JdbcUtil;
import bean.Admin;
import dao.AdminDao;
 
public class AdminDaoImpl implements AdminDao {
 
    private Connection conn;
    private PreparedStatement pstmt;
    private ResultSet rs;
 
    @Override
    public boolean insert(Admin entity) {
        return JdbcUtil.upDate("insert into admin (name,pass) values (?,?)",
                new Object[] { entity.getName(), entity.getPass() });
    }
 
    @Override
    public boolean delete(Admin entity) {
        // TODO Auto-generated method stub
        return deleteById(entity.getId());
    }
 
    @Override
    public boolean deleteById(Integer id) {
        // TODO Auto-generated method stub
        return JdbcUtil.upDate("delete from admin where id=?",
                new Object[] { id });
    }
 
    @Override
    public boolean update(Admin entity) {
        // TODO Auto-generated method stub
        return JdbcUtil.upDate(
                "update admin set name=?,pass=? where id=?",
                new Object[] { entity.getName(), entity.getPass(),
                        entity.getId() });
    }
 
    @Override
    public List<Admin> findAll() {
        // TODO Auto-generated method stub
        return null;
    }
 
    @Override
    public Admin findById(Integer id) {
        // TODO Auto-generated method stub
        return null;
    }
 
    @Override
    public List<Admin> findNowPageInfo(int nowpage, int pagesize,
            String sortName, String sortOrder) {
        // TODO Auto-generated method stub
        return null;
    }
 
    @Override
    public Integer getCountPage(int pagesize) {
        // TODO Auto-generated method stub
        return null;
    }
 
    @Override
    public boolean deletes(Object[] ids) {
        // TODO Auto-generated method stub
        return false;
    }
 
    @Override
    public Admin checkLogin(String name, String pass) {
        // TODO Auto-generated method stub
        Admin entity = null;
        String sql = "select * from admin where name=? and pass=?";
        conn = JdbcUtil.getConn();
        try {
            pstmt = conn.prepareStatement(sql);
            int index = 1;
            pstmt.setString(index++, name);
            pstmt.setString(index++, pass);
            rs = pstmt.executeQuery();
 
            if (rs.next()) {
                entity = new Admin();
                entity.setId(rs.getInt("id"));
                entity.setName(rs.getString("name"));
                entity.setPass(rs.getString("pass"));
            }
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            JdbcUtil.release(rs, pstmt);
        }
        return entity;
    }
 
    @Override
    public Admin checkLogin(String name) {
        Admin entity = null;
        String sql = "select * from admin where name=?";
        conn = JdbcUtil.getConn();
        try {
            pstmt = conn.prepareStatement(sql);
            int index = 1;
            pstmt.setString(index++, name);
            rs = pstmt.executeQuery();
            if (rs.next()) {
                entity = new Admin();
                entity.setId(rs.getInt("id"));
                entity.setName(rs.getString("name"));
                entity.setPass(rs.getString("pass"));
            }
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            JdbcUtil.release(rs, pstmt);
        }
        return entity;
    }
 
}



服务器接口类,用来将操作数据库的方法与记录历史的方法或其他的方法分离开,作用是增强代码的可读性以及条理性,

 

package service;
 
import java.util.List;
 
public interface BaseService<T, PK> {
    /**
     * 插入数据
     */
    boolean insert(T entity);
 
    /**
     * 根据实体删除数据
     */
    boolean delete(T entity);
 
    /**
     * 根据ID删除数据
     */
    boolean deleteById(PK id);
 
    /**
     * 修改数据
     */
    boolean update(T entity);
 
    /**
     * 查询所有数据
     */
    List<T> findAll();
 
    /**
     * 根据ID查询数据
     */
    T findById(PK id);
 
    /**
     * 根据当前页查询数据
     */
    List<T> findNowPageInfo(int nowpage, int pagesize,String sortName,String sortOrder);
 
    /**
     * 返回总页数
     */
    Integer getCountPage(int pagesize);
 
    /**
     * 批量删除
     */
 
    boolean deletes(Object ids[]);
 
}

 

package service;
 
import bean.Admin;
 
public interface AdminService extends BaseService<Admin, Integer> {
    Admin checkLogin(String name,String pass);
    Admin checkLogin(String name);
}



实现服务器接口方法的实现类

 

package serviceImpl;
 
import java.util.List;
 
import dao.AdminDao;
import daoImpl.AdminDaoImpl;
 
import bean.Admin;
import service.AdminService;
 
public class AdminServiceImpl implements AdminService {
    AdminDao adminDao = new AdminDaoImpl();
 
    @Override
    public boolean insert(Admin entity) {
        return adminDao.insert(entity);
    }
 
    @Override
    public boolean delete(Admin entity) {
        return false;
    }
 
    @Override
    public boolean deleteById(Integer id) {
        return false;
    }
 
    @Override
    public boolean update(Admin entity) {
        return false;
    }
 
    @Override
    public List<Admin> findAll() {
        return null;
    }
 
    @Override
    public Admin findById(Integer id) {
        return null;
    }
 
    @Override
    public List<Admin> findNowPageInfo(int nowpage, int pagesize,
            String sortName, String sortOrder) {
        return null;
    }
 
    @Override
    public Integer getCountPage(int pagesize) {
        return null;
    }
 
    @Override
    public boolean deletes(Object[] ids) {
        return false;
    }
 
    @Override
    public Admin checkLogin(String name, String pass) {
        Admin entity = adminDao.checkLogin(name, pass);
        return entity;
    }
 
    @Override
    public Admin checkLogin(String name) {
        Admin entity = adminDao.checkLogin(name);
        return entity;
    }
 
}



用来将页面传入的信息进行分析处理的服务器类,

package servlet;
 
import java.io.IOException;
import java.net.URLEncoder;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
 
import javax.jms.Message;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
import com.sun.mail.util.BASE64DecoderStream;
import com.sun.mail.util.BASE64EncoderStream;
 
import service.AdminService;
import serviceImpl.AdminServiceImpl;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
import bean.Admin;
 
public class AdminServlet extends HttpServlet {
 
    private AdminService adminService = new AdminServiceImpl();
 
    // 规定时间常量,为一天
    private final int EXPIRES =  60 * 60 * 24;
 
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // request.setCharacterEncoding("UTF-8");
 
        String oper = request.getParameter("oper");
        if ("adminLogin".equals(oper)) {
            adminLogin(request, response);
        }
        if ("login".equals(oper)) {
            request.getRequestDispatcher("./login.jsp").forward(request,
                    response);
        }
 
    }
 
    private void adminLogin(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
         
        //获取表单提交的数据
        String name = request.getParameter("name");
        String pass = request.getParameter("pass");
        String mark = request.getParameter("mark");
        String day = request.getParameter("day");
 
//      System.out.println(name + "====" + pass + "====" + mark
//              + "============" + day);
 
        //根据获取的数据向数据库发送数据请求,
        Admin entity = adminService.checkLogin(name, pass);
 
        //判断查询结果
        if (entity != null) {
            //判断用户是否进行记录密码和自动登陆的操作
            if ("mark".equals(mark)) {
                // 获取当前的时间并加上要保存的时间长度
                long time = System.currentTimeMillis()
                        + (EXPIRES * Integer.valueOf(day)*1000);
 
                // 声明cookie
                Cookie autoCookie = null;
                // 获取所有的cookie的数组
                Cookie cookies[] = request.getCookies();
                // 遍历判断
                for (Cookie cookie : cookies) {
                    // 判断是否已经存在cookie记录
                    if ("autoLogin".equals(cookie.getName())) {
                        // 存在即直接赋值
                        autoCookie = cookie;
                        // 并改变内容
                        String newValue = name
                                + ":"
                                + time
                                + ":"
                                + md5Value(pass + ":" + name + ":" + time
                                        + ":donghongyujava");
                        autoCookie.setValue(newValue);
                    } else {
                        String cookieValue = name
                                + ":"
                                + time
                                + ":"
                                + md5Value(pass + ":" + name + ":" + time
                                        + ":donghongyujava");
                        /*
                         * Control character in cookie value or attribute.
                         * 当存入的数据是中文时,cookie会出现乱码现象 需要进行编码的转换
                         */
                        autoCookie = new Cookie("autoLogin", URLEncoder.encode(
                                cookieValue, "UTF-8"));
                    }
                }
                // 设置cookie的最长的存活时间
                autoCookie.setMaxAge(EXPIRES * Integer.valueOf(day));
                response.addCookie(autoCookie);
            }
            // 将admin存入到session
            request.getSession().setAttribute("admin", entity);
            // 设置成功后就登陆操作
            request.getRequestDispatcher("./sc.jsp").forward(request, response);
        } else {
             
            request.setAttribute("msg", "用户名或密码错误请重试");
            request.getRequestDispatcher("./login.jsp").forward(request,
                    response);
        }
    }
 
    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        this.doGet(request, response);
    }
 
    //加密的操作方法
    public String md5Value(String value) {
        try {
            // 获取md5加密的对象
            MessageDigest digest = MessageDigest.getInstance("md5");
            // 将传入的数据装换为byte字节,在用digest进行转换(加密)成新的字节数组,
            byte result[] = digest.digest(value.getBytes());
            //需要的jdk版本myeclipse2013中自带的com.sun.java.jdk.win32.x86_64_1.6.0.u43
            //jdk1.7.0_25没有相关的包
            BASE64Encoder encoder = new BASE64Encoder();
            // 返回加密后的数据
            return encoder.encode(result);
        } catch (NoSuchAlgorithmException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return "";
    };
 
}



过滤器类,用来设置请求的编码

package filter;
 
import java.io.IOException;
 
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
public class EncodingFilter implements Filter {
    private FilterConfig filterConfig;
 
    @Override
    public void destroy() {
        // TODO Auto-generated method stub
    }
 
    @Override
    public void doFilter(ServletRequest req, ServletResponse res,
            FilterChain chain) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) req;
        HttpServletResponse response = (HttpServletResponse) res;
        // 编码的设置
        request.setCharacterEncoding(filterConfig.getInitParameter("encoding"));
        chain.doFilter(request, response);
    }
 
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        // TODO Auto-generated method stub
        this.filterConfig=filterConfig;
    }
 
}



自动登录的过滤类,用来控制用户的自动的登录操作的相关

 

package filter;
 
import java.io.IOException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
 
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
import bean.Admin;
 
import service.AdminService;
import serviceImpl.AdminServiceImpl;
import sun.misc.BASE64Encoder;
 
public class AutoLoginFilter implements Filter {
 
    @Override
    public void destroy() {
        // TODO Auto-generated method stub
    }
 
    @Override
    public void doFilter(ServletRequest req, ServletResponse res,
            FilterChain chain) throws IOException, ServletException {
        // 强制造型为子类型
        HttpServletRequest request = (HttpServletRequest) req;
        HttpServletResponse response = (HttpServletResponse) res;
        // 1.首先判断session
        Object object = request.getSession().getAttribute("admin");
 
        if (object != null) {
            request.getRequestDispatcher("./sc.jsp").forward(request, response);
            return;
        }
 
        // 2.判断cookie中是否存在用户的记录
        Cookie autoCookie = null;
        // 获取所有的cookie进行遍历判断
        Cookie cookies[] = request.getCookies();
        if (cookies != null) {
            for (Cookie cookie : cookies) {
                // 判断是否已经存贮用户记录
                if ("autoLogin".equals(cookie.getName())) {
                    autoCookie = cookie;
                }
            }
 
            // 判断是否存在用户自动登录记录
            if (autoCookie == null) {
                chain.doFilter(request, response);
                return;
            }
 
            // 3.判断cookie的值
            // 获取cookie值
            String value = autoCookie.getValue();
            // 拆分
            String temps[] = value.split(":");
 
            // 判断长度是否是自定义的长度
            if (temps.length != 3) {
                chain.doFilter(request, response);
                return;
            }
            // 获取拆分后的数据
            String name = temps[0];
             
            String time = temps[1];
             
            String service_md5Value = temps[2];
 
            // 4.根据时间判断是否失效
            if (Long.valueOf(time) <= System.currentTimeMillis()) {
                chain.doFilter(request, response);
                return;
            }
 
            // 5.根据用户名查询数据
            AdminService adminService = new AdminServiceImpl();
            // 向数据库发送数据请求
            Admin entity = adminService.checkLogin(name);
            if (entity == null) {
                chain.doFilter(request, response);
                return;
            }
 
            // 6.拼接字符串在进行二次判断,
            String md5Temp = entity.getPass() + ":" + entity.getName() + ":"
                    + time + "donghongyujava";
            if (!(md5Value(md5Temp).equals(service_md5Value))) {
                chain.doFilter(request, response);
                return;
            }
 
            // 7.如果以上的判断都通过,那么就发送成功的转跳连接
            request.getSession().setAttribute("admin", entity);
            request.getRequestDispatcher("./sc.jsp").forward(request, response);
        } else {
            chain.doFilter(request, response);
            return;
        }
    }
 
    @Override
    public void init(FilterConfig arg0) throws ServletException {
        // TODO Auto-generated method stub
 
    }
 
    // 加密的操作函数
    public String md5Value(String value) {
        try {
            // 获取md5加密的对象
            MessageDigest digest = MessageDigest.getInstance("md5");
            // 将传入的数据装换为byte字节,在用digest进行转换(加密)成新的字节数组,
            byte result[] = digest.digest(value.getBytes());
            BASE64Encoder encoder = new BASE64Encoder();
            // 返回加密后的数据
            return encoder.encode(result);
 
        } catch (NoSuchAlgorithmException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return "";
    };
 
}



web的配置,主要配置的是servlet和filter的配置

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi=" http://www.w3.org/2001/XMLSchema-instance"
    xmlns=" http://java.sun.com/xml/ns/javaee" xmlns:web=" http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    xsi:schemaLocation=" http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    id="WebApp_ID" version="3.0">
    <display-name>jqueryeasyui</display-name>
    <servlet>
        <servlet-name>AdminServlet</servlet-name>
        <servlet-class>servlet.AdminServlet</servlet-class>
    </servlet>
 
    <servlet-mapping>
        <servlet-name>AdminServlet</servlet-name>
        <url-pattern>/AdminOPer.do</url-pattern>
    </servlet-mapping>
 
 
    <filter>
        <filter-name>AutoLoginFilter</filter-name>
        <filter-class>filter.AutoLoginFilter</filter-class>
    </filter>
 
    <filter-mapping>
        <filter-name>AutoLoginFilter</filter-name>
        <url-pattern>/AdminOPer.do</url-pattern>
    </filter-mapping>
 
 
    <filter>
        <filter-name>EncodingFilter</filter-name>
        <filter-class>filter.EncodingFilter</filter-class>
        <!-- 设置传入的参数是UTF-8 -->
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
    </filter>
 
    <!-- 设置所有的请求操作都进行这个过滤的操作 -->
    <filter-mapping>
        <filter-name>EncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
 
    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>default.html</welcome-file>
        <welcome-file>default.htm</welcome-file>
        <welcome-file>default.jsp</welcome-file>
    </welcome-file-list>
</web-app>



用来跳转的jsp代码

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
     
    <title>My JSP 'index.jsp' starting page</title>
     
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">    
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->
 
  </head>
   
  <body>
   <a href="${pageContext.request.contextPath}/AdminOPer.do?oper=login">登录操作</a>
  </body>
</html>



要登陆的表单界面

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
 
<%@include file="/common/tag.jsp"%>
<%@include file="/common/jquery.jsp"%>
 
 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
 
<title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->
</head>
 
<body>
    <div>
        <!-- 登录错误时的提示操作 -->
        <b>${requestScope.msg}</b>
        <!-- ${pageContext.request.contextPath}代表当前项目路径下的操作 -->
        <form action="${pageContext.request.contextPath}/AdminOPer.do"
            method="post">
            <table border="1">
                <tr>
                    <td>用户名:</td>
                    <td><input type="text" name="name"></td>
                </tr>
                <tr>
                    <td>密码:</td>
                    <td><input type="text" name="pass"></td>
                </tr>
                <tr>
                    <td align="right"><input type="checkBox" name="mark"
                        value="mark"></td>
                    <td>下次记住密码</td>
                </tr>
                <tr>
                    <td colspan="2"><input type="radio" name="day" value="1">一天
                        <input type="radio" name="day" value="3">三天 <input
                        type="radio" name="day" value="7" checked="checked">一周</td>
                </tr>
                <tr>
                    <td align="center" colspan="2"><input type="submit" value="登录"
                        id="submit"><input type="reset" value="重置" id="reset"></td>
                </tr>
            </table>
            <input type="hidden" value="adminLogin" name="oper">
        </form>
    </div>
</body>
</html>



成功登录后的界面jsp代码

 

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
    String path = request.getContextPath();
    String basePath = request.getScheme() + "://"
            + request.getServerName() + ":" + request.getServerPort()
            + path + "/";
%>
 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
 
<title>My JSP 'sc.jsp' starting page</title>
 
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->
 
</head>
 
<body>
<!-- 从session域中取出已经存入的用户对象 -->
    欢迎  <b>${sessionScope.admin.name}</b>进入
</body>
</html>


     

本文转载自:http://my.oschina.net/donghongyu/blog/190504

J
粉丝 27
博文 164
码字总数 9502
作品 0
广州
程序员
私信 提问
java B2B2C 多级分销多租户电子商城系统-单点登录(SSO)简介

单点登录SSO(Single Sign-On)是身份管理中的一部分。 SSO的一种较为通俗的定义是:SSO是指访问同一服务器不同应用中的受保护资源的同一用户,只需要登录一次,即 通过一个应用中的安全验证...

it菲菲
04/12
0
0
从.Net到Java学习第十一篇——SpringBoot登录实现

通过前面10篇文章的学习,相信我们对SpringBoot已经有了一些了解,那么如何来验证我们的学习成果呢?当然是通过做项目来证明吧!所以从这一篇开始我将会对之前自己做的.net项目用java来重写。...

邹琼俊
2018/07/13
0
0
通过 HttpAuthenticationMechanism 执行 Web 身份验证

通过 Java EE 8 中新的注解驱动的 HTTP 身份验证机制执行经典和自定义的 Servlet 身份验证 系列内容: 此内容是该系列 4 部分中的第 # 部分: Java EE 8 Security API 入门,第 2 部分 http...

Alex Theedom
2018/04/02
0
0
【项目管理】软件项目经理须知的 Java 8 安全知识

【译者按】作为软件研发项目的项目经理,只懂项目管理知识是不够的,需要对软件技术本身有基本的了解。Java 是一种主流的系统开发语言,其安全设计对于构建安全的信息系统有至关重要的意义。...

军雷
2017/06/08
0
0
迫切需要一份JAVA开发的工作,求收留。

帮朋友发求职,求一份JAVA开发的工作,薪水不是问题。只要能活着,需要一个 锻炼的机会,电话:15807563277 邮件:John_liang.coward@163.com 个人技能 1. 熟悉Linux系统环境,熟练使用常用...

XiaoCon
2014/03/01
630
7

没有更多内容

加载失败,请刷新页面

加载更多

OpenCv + ffmpeg + rtmp 实现摄像头采集数据直播功能

采用OpenCv获取图像数据,通过ffmpeg推流给rtmp服务器 OpenCV获取的图像数据为BGR格式,需要转换成YUV格式,再将其编码为h264格式,通过ffmpeg推流 头文件 extern "C"{#include <libavco...

cloudjx
27分钟前
1
0
服务器yum源更新为阿里云yum源

1 备份下原来的yum源 cd /etc/yum.repos.d/ mv CentOS-Base.repo CentOS-Base.repo_bak 1 2 3 2 获取阿里云yum源 wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/re......

Mr_Tea伯奕
35分钟前
0
0
CLEARTEXT communication to xxx not permitted by network security policy

Android P http网络请求不通,报出异常:java.net.UnknownServiceException: CLEARTEXT communication to xxxx not permitted by network security policy Google表示,为保证用户数据和设备......

醉雨
49分钟前
3
0
开发函数计算的正确姿势 —— 移植 next.js 服务端渲染框架

首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute): 函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传。函数计算准...

阿里云云栖社区
今天
1
0
Windows获取其他进程中Edit控件的内容

最近做的MFC项目中,有个获取其他进程中Edit控件内容的需求,本来以为是个很简单的问题,但是来来回回折腾了不少时间,发博记录一下。   刚开始拿到这个问题,很自然的就想到GetDlgItemTex...

WinkJie
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部