精华内容
下载资源
问答
  • 第8章 登录功能实现-登录成功跳转主页面8.1涉及的技术知识点1) Session会话 CookieJSTL标签8.2Cookie1) HTTP是无状态协议,服务器不能记录浏览器的访问状态,也就是说服务器不能区分中两次请求是否由一个客户端发出...

    第8章 登录功能实现-登录成功跳转主页面

    8.1涉及的技术知识点

    1)   Session会话  CookieJSTL标签

    8.2Cookie

    1)  HTTP是无状态协议,服务器不能记录浏览器的访问状态,也就是说服务器不能区分中两次请求是否由一个客户端发出。这样的设计严重阻碍的Web程序的设计。如:在我们进行网购时,买了一条裤子,又买了一个手机。由于http协议是无状态的,如果不通过其他手段,服务器是不能知道用户到底买了什么。而Cookie就是解决方案之一。

    2)  Cookie实际上就是服务器保存在浏览器上的一段信息。浏览器有了Cookie之后,每次向服务器发送请求时都会同时将该信息发送给服务器,服务器收到请求后,就可以根据该信息处理请求。

    3)  Cookie的用途

    网上商城购物车

    用户登录状态的保持

    4)  Cookie的限制性

    Cookie最为请求或响应报文发送,无形中增加了网络流量。

    Cookie是明文传送的安全性差。

    各个浏览器对Cookie有限制,使用上有局限

    5)  Cookie的具体使用

    创建cookie

    a8d9cb31baacc5fdad1b33e530c6f2e4.png

    读取cookie

    b652e66d33bce566df1c52c1ae867217.png

    8.3Session

    1)   使用Cookie有一个非常大的局限,就是如果Cookie很多,则无形的增加了客户端与服务端的数据传输量。而且由于浏览器对Cookie数量的限制,注定我们不能再Cookie中保存过多的信息,于是Session出现。

    2)  Session的作用就是在服务器端保存一些用户的数据,然后传递给用户一个名字为JSESSIONID的Cookie,这个JESSIONID对应这个服务器中的一个Session对象,通过它就可以获取到保存用户信息的Session。

    3)  Session的工作原理

    Session的创建时机是在getSession()方法第一次被调用时。

    Session被创建后,同时还会有一个名为JSESSIONID的Cookie被创建。

    这个Cookie的默认时效就是当前会话。

    简单来说,Session机制也是依赖于Cookie来实现的

    4)  Session的具体使用

    023edcd85532a41d66fb3dde6aaf7702.png        5)  Session的时效问题

    Session默认有效时间为30分钟,可以在服务器的web.xml配置中修改.

    584be6cb0cc9560062e62c2c24956ca6.png

    8.4URL重写

    1)   整个会话控制技术体系中,保持JSESSIONID的值主要通过Cookie实现。但Cookie在浏览器端可能会被禁用,所以我们还需要一些备用的技术手段,例如:URL重写。

    2)  URL重写其实就是将JSESSIONID的值以固定格式附着在URL地址后面,以实现保持JSESSIONID,进而保持会话状态。这个固定格式是:URL;jsessionid=xxxxxxxxx

    3)  实现方式

    06d98ad6853559d3c396d8be5f04bc0e.png

    8.5具体功能展示

    c48a1c8812b658a2aff8e2bb9504574f.png

    上一篇: Java WEB 第7章 注册功能实现-异步的表单校验

    下一篇: Java WEB 第9章主页面访问权限控制

    展开全文
  • java实现跳转菜单

    2021-02-27 16:22:55
    思路是:获取到用户信息后,让用户处于登录状态。并且根据state,跳转到相关的页面。 菜单中配置的url形如: ...

    不嫌代码写的烂 可以参考下

    https://github.com/ren2881971/WeChat

    着急实现功能 没重构 ######

    /**

    * 微信授权

    *

    *

    */

    public class CUserOauthWeixinRedirect extends ABaseCommand {

    private static final String URL_OAUTH_ACCESS_TOKEN =

    "https://api.weixin.qq.com/sns/oauth2/access_token";

    private static final String URL_OAUTH_USER_INFO = "https://api.weixin.qq.com/sns/userinfo";

    /** 状态:module0xxx010010 模块0xxx0识别ID*/

    private String state;

    /** 换取access_token票据 */

    private String code;

    String module;

    String id;

    String ip;

    @Override

    public void init() throws Exception {

    state = getPara("state");

    if (StrKit.isBlank(state)) {

    throw new ArgException("状态不正确");

    }

    String[] moduleInfoArray = state.split(Define.WEIXIN_MODULE_OAUTH_SPLITER);

    if (moduleInfoArray.length != 2) {

    throw new ArgException("状态不正确");

    }

    module = moduleInfoArray[0];

    if (!Define.validateWeixinModule(module)) {

    throw new ArgException("模块不存在");

    }

    id = moduleInfoArray[1];

    code = getPara("code");

    Util.assertNotBlank(code, "code不能为空");

    ip = "%";

    }

    @Override

    public void doCommand(AResult result) throws Exception {

    RedirectResult redirectResult = (RedirectResult) result;

    Map queryParas = new HashMap();

    queryParas.put("grant_type", "authorization_code");

    queryParas.put("appid", Define.WEIXIN_APP_ID);

    queryParas.put("secret", Define.WEIXIN_APP_SECRET);

    queryParas.put("code", code);

    String responseStr = null;

    try {

    responseStr = HttpKit.get(URL_OAUTH_ACCESS_TOKEN, queryParas);

    } catch (Exception e) {

    e.printStackTrace();

    throw new BizException("微信授权失败");

    }

    System.out.println(responseStr);

    JSONObject accessObj = JSONObject.parseObject(responseStr);

    JSONObject userObj = fetchUserInfo(accessObj.getString("access_token"), accessObj.getString("openid"));

    userObj.put("ip", ip);

    userObj.put("token", accessObj.getString("access_token"));

    userObj.put("refreshToken", accessObj.getString("refresh_token"));

    userObj.put("expireSeconds", accessObj.getInteger("expires_in"));

    UserBind userBind = UserService.service.findUserBindBySource(Define.USER_BIND_TYPE_WEIXIN, userObj.getString("fromId"));

    CurrentUser currentUser;

    User user = null;

    if (userBind == null) {

    user = new User();

    AuthService.service.registerFromThird(Define.USER_BIND_TYPE_WEIXIN, userObj, user);

    System.out.println("用户[openid=" + userObj.getString("fromId") + ", nickname=" + userObj.getString("nickname") + "]注册成功,用户ID为[" + user.getId() + "]");

    } else {

    user = User.dao.findById(userBind.getToId());

    }

    currentUser = AuthService.service.login(user, ip);

    System.out.println("正在跳转....");

    redirectResult.setUrl("http://" + Define.APP_DOMAIN + getRedirectUrl() + "?u=" + currentUser.getId() + "&t=" + currentUser.getToken());

    }

    private JSONObject fetchUserInfo(String accessToken, String openId) {

    Map queryParas = new HashMap();

    queryParas.put("access_token", accessToken);

    queryParas.put("openid", openId);

    String response = HttpKit.get(URL_OAUTH_USER_INFO, queryParas);

    System.out.println("user info: " + response);

    JSONObject rawUserObj = JSONObject.parseObject(response);

    JSONObject userObj = new JSONObject();

    userObj.put("fromId", rawUserObj.getString("openid"));

    userObj.put("nickname", rawUserObj.getString("nickname"));

    int sex = rawUserObj.getInteger("sex");

    userObj.put("gender", (sex == 0 || sex == 1) ? Define.GENDER_MALE : Define.GENDER_FEMALE);

    userObj.put("province", rawUserObj.getString("province"));

    userObj.put("city", rawUserObj.getString("city"));

    userObj.put("country", rawUserObj.getString("country"));

    userObj.put("avatar", rawUserObj.getString("headimgurl"));

    return userObj;

    }

    // TODO 策略模式重写

    private String getRedirectUrl() {

    String redirectUrl = "/statics/shop_locals.html";

    // 菜单

    if (Define.WEIXIN_MODULE_MENU.equals(module)) {

    int menuId = Integer.parseInt(id);

    if (!Define.validateWeixinModuleMenuId(menuId)) {

    throw new ArgException("模块不存在");

    }

    switch (menuId) {

    // --------我要签到

    case Define.WEIXIN_MODULE_MENU_ID_CHECKIN_SIGN: {

    redirectUrl = "/statics/checkin_sign.html";

    break;

    }

    // --------签到记录

    case Define.WEIXIN_MODULE_MENU_ID_CHECKIN_HISTORY: {

    redirectUrl = "/statics/checkin_history.html";

    break;

    }

    case Define.WEIXIN_MODULE_MENU_ID_SHOP_LOCALS: {

    redirectUrl = "/statics/shop_locals.html";

    break;

    }

    case Define.WEIXIN_MODULE_MENU_ID_SHOP_ACTIVITIES: {

    redirectUrl = "/statics/shop_activities.html";

    break;

    }

    // --------我的红包

    case Define.WEIXIN_MODULE_MENU_ID_GIFTS: {

    redirectUrl = "/statics/gifts.html";

    break;

    }

    // --------我的消息

    case Define.WEIXIN_MODULE_MENU_ID_MESSAGES: {

    redirectUrl = "/statics/messages.html";

    break;

    }

    // --------我的资料

    case Define.WEIXIN_MODULE_MENU_ID_PROFILE: {

    redirectUrl = "/statics/profile.html";

    break;

    }

    default:

    break;

    }

    }

    // TODO 活动

    if (Define.WEIXIN_MODULE_ACTIVITY.equals(module)) {

    }

    return redirectUrl;

    }

    @Override

    public AResult initResult() {

    return new RedirectResult();

    }

    用的是jfinal,可能不好理解,不过核心代码都在。

    思路是:获取到用户信息后,让用户处于登录状态。并且根据state,跳转到相关的页面。

    菜单中配置的url形如:

    https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxe0a2ed1be585xxxx&redirect_uri=http://mywebsite.com/user/oauthWeixin&response_type=code&scope=snsapi_userinfo&state=menu0xxx020010#wechat_redirect

    ######

    引用来自“渔樵耕读”的评论

    不嫌代码写的烂 可以参考下

    https://github.com/ren2881971/WeChat

    着急实现功能 没重构

    appID=wx29bedaf2e1bd9d2d

    appSecret=**********************

    开源代码不要把这些放出来啊。 ######哎呀呀 失误失误######可以试试这个https://github.com/chanjarster/weixin-java-tools######这个库 真的很不错。 我一直在学习他~######记得一定要交300给腾讯,不然 。

    展开全文
  • 该楼层疑似违规已被系统折叠隐藏此楼查看此楼import java.awt.Color;import java.awt.Container;import java.awt.GridLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

    import java.awt.Color;

    import java.awt.Container;

    import java.awt.GridLayout;

    import java.awt.event.ActionEvent;

    import java.awt.event.ActionListener;

    import javax.swing.JButton;

    import javax.swing.JDialog;

    import javax.swing.JFrame;

    import javax.swing.JLabel;

    import javax.swing.JOptionPane;

    import javax.swing.JPanel;

    import javax.swing.JPasswordField;

    import javax.swing.JScrollPane;

    import javax.swing.JTable;

    import javax.swing.JTextField;

    import javax.swing.SwingConstants;

    import home004.JTableDemo;

    import home004.PasWord;

    public class JTableDemo extends JFrame {

    private JScrollPane scrollPan=null;

    private JTable table=null;

    public JTableDemo( ){

    //初始化工作

    setTitle("学生信息");

    setBounds(450, 150, 500, 500);

    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    init();

    setVisible(true);

    JPanel contentPane=new JPanel();

    }

    /**

    * 初始化组件

    */

    private void init(){

    Object[][] data={{"1","姚强","男","95","92"},{"2","杨震","男","98","69"},{"3","曾小康","女","95","92"}};

    Object[] title={"学号","姓名","性别","Java成绩","C++成绩"};

    table=new JTable(data, title);

    scrollPan=new JScrollPane(table);

    this.add(scrollPan);

    }

    public static void main(String[] args) {

    JFrame jf=new JTableDemo();

    new PasWord(jf); //新建一输入密码对话框

    }

    }

    class PasWord implements ActionListener //输入密码对话框类

    {

    JTextField user;

    JPasswordField passWd;

    JButton b1,b2;

    Container dialogPane;

    JDialog d;

    JFrame f;

    public PasWord(JFrame f) {

    d=new JDialog(); //新建一对话框

    d.setTitle("请输入用户名和密码"); //设置标题

    dialogPane=d.getContentPane();

    dialogPane.setLayout(new GridLayout(3,2));

    dialogPane.add(new JLabel("用户名",SwingConstants.CENTER));

    user=new JTextField();

    dialogPane.add(user);

    dialogPane.add(new JLabel("密 码",SwingConstants.CENTER));

    passWd=new JPasswordField();

    dialogPane.add(passWd);

    b1=new JButton("确定");

    b2=new JButton("退出");

    dialogPane.add(b1);

    dialogPane.add(b2);

    b1.addActionListener(this);

    b2.addActionListener(this);

    d.setBounds(500,300,300,130);

    d.getRootPane().setDefaultButton(b1);

    d.setVisible(true);

    this.f=f;

    }

    public void actionPerformed(ActionEvent e){

    String cmd=e.getActionCommand();

    if(cmd.equals("确定"))

    {

    String name=user.getText();

    char[] c=passWd.getPassword();

    String passWord=new String(c);

    if((name.equals("123"))&&(passWord.equals("123")))

    {

    new JTableDemo();

    d.dispose();

    f.setVisible(true);

    return;

    }

    else

    {

    JOptionPane.showMessageDialog(d,"用户名或密码错误","请重新输入",JOptionPane.WARNING_MESSAGE);

    user.setText("");

    passWd.setText("");

    }

    }

    if(cmd.equals("退出"))

    System.exit(0);

    }

    }

    展开全文
  • 页面跳转的简单实现(单点登录

    千次阅读 2021-03-14 13:44:05
    需求说明说明:当用户点击登录/注册按钮时,需要跳转到指定的页面中。编辑UserController@Controller@RequestMapping("/user")public class UserController {/*** 实现用户模块跳转* url1:...

    需求说明

    说明:当用户点击登录/注册按钮时,需要跳转到指定的页面中。

    4d37680eb72a29493a9dc8089efeb027.png

    编辑UserController@Controller

    @RequestMapping("/user")

    public class UserController {

    /**

    * 实现用户模块跳转

    * url1:http://www.jt.com/user/login.html 页面:login.jsp

    * url2:http://www.jt.com/user/register.html 页面:register.jsp

    * @return 页面

    * 使用restful的风格

    * 动态获取url中的参数,之后实现通用的跳转

    */

    @RequestMapping("/{moduleName}")

    public String module(@PathVariable String moduleName){

    return moduleName;

    }

    }

    页面效果展现

    3f4bace99b501d0ad56effb5175951dc.png

    实现单点登录

    创建JT-SSO项目

    236276a295d93a953ed61c2143519818.png

    添加继承/依赖/插件<?xml version="1.0" encoding="UTF-8"?>

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

    4.0.0

    jt-sso

    jar

    jt

    com.jt

    1.0-SNAPSHOT

    com.jt

    jt-common

    1.0-SNAPSHOT

    org.springframework.boot

    spring-boot-maven-plugin

    编辑User的POJO对象@TableName("tb_user")

    @Data

    @Accessors(chain = true)

    public class User extends BasePojo{

    @TableId(type = IdType.AUTO)//设定主键自增

    private Long id; //用户ID号

    private String username; //用户名

    private String password; //密码 需要md5加密

    private String phone; //电话号码

    private String email; //使用电话代替邮箱

    }

    测试JT-SSO项目

    用户通过sso.jt.com/findUserAll获取user表中的信息,json返回代码。

    8fa0d42934c07b068a128dfecd99e584.png

    编辑UserControllerpackage com.jt.controller;

    import com.jt.pojo.User;

    import com.jt.service.UserService;

    import org.springframework.beans.factory.annotation.Autowired;

    import org.springframework.web.bind.annotation.RequestMapping;

    import org.springframework.web.bind.annotation.RestController;

    import java.util.List;

    @RestController

    public class UserController {

    @Autowired

    private UserService userService;

    /**

    * 完成测试按钮

    * 1.url地址 :findUserAll

    * 2.参数信息: null

    * 3.返回值结果: List

    *

    */

    @RequestMapping("/findUserAll")

    public List findUserAll(){

    return userService.findUserAll();

    }

    }

    编辑UserServicepackage com.jt.service;

    import com.jt.mapper.UserMapper;

    import com.jt.pojo.User;

    import org.springframework.beans.factory.annotation.Autowired;

    import org.springframework.stereotype.Service;

    import java.util.List;

    @Service

    public class UserServiceImpl implements UserService{

    @Autowired

    private UserMapper userMapper;

    @Override

    public List findUserAll() {

    return userMapper.selectList(null);

    }

    }

    修改nginx配置

    f598fbe340e4cf00e9d9429cee0e4334.png

    展开全文
  • Java实现注册登录跳转

    2021-07-07 16:48:47
    创建数据库,创建一个登录表login存储用户的用户名和密码,使用sql insert语句将注册的信息插入到数据库中,使用sql select语句查询用户名和密码是否存在数据库的login表中,实现登录功能。...mysql-connector-java&l
  • java登录跳转

    2021-03-13 08:45:24
    首先进入生活号配置生活号后台,目前可在广告位、营销位、自定义菜单、群发消息、模板消息、自动回复等配置中设置跳转小程序。配置跳转小程序前提生活号需要关联小程序,否则不能选择对应的小程序进行配置。1、可在...
  • java后台跳转

    2021-03-17 22:01:02
    使用方法是: 相应的java代码 String content=stayTime+";URL="+URL; response.setHeader("REFRESH",content); ------------------------------------------------------------------------------------------------...
  • 1 packagecom.test....23 importjava.io.IOException;4 importjava.io.PrintWriter;5 importjava.util.ArrayList;6 importjava.util.List;78 importjavax.servlet.Filter;9 importjavax.servlet.FilterChain;10 i...
  • java登录为什么不跳转

    2021-03-01 10:11:07
    importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;importjava.sql.*;publicclassUserLoginextendsJFrameimplementsActionListener{DataBaseManagerdb=newDataBaseManage...import java.awt.*;import ja...
  • JAVA break跳转

    2021-02-26 15:19:44
    importjava.util.Scanner;publicclassbobo{publicstaticvoidmain(String[]agrs){Stringa[][]=newString[100][4];intb[][][]=newint[3000][12][4];intd[]=newint[4];intx=0;inty=0;int...import java.util.Scanner;pu...
  • java实现登录案例

    2021-03-09 19:41:10
    本文实例为大家分享了java实现登录案例的具体代码,供大家参考,具体内容如下一、环境搭建JDK1.8 + Tomcat1.8二、目录结构三、代码示例3.1、fail.html页面faill.html亲, 你的用户名或密码输入有误!请重新输入!返回...
  • java跳转html并传值

    2021-06-13 02:46:23
    java跳转html并传值[2021-01-30 05:39:20]简介:php去除nbsp的方法:首先创建一个PHP代码示例文件;然后通过“preg_replace("/(\s|\&nbsp\;| |\xc2\xa0)/", " ", strip_tags($val));”方法去除所有nbsp即可。...
  • java跳转的不同

    2021-03-08 07:35:53
    Java Web开发中,经常会用到跳转页面的方法,一般有下面两种方法。Java代码HttpServletResponse response = new HttpServletResponse();response.sendRedirect(location)HttpServletResponse response = new ...
  • java web服务器跳转

    2021-02-25 19:39:05
    客户端跳转:response.sendRedirect("index.jsp");example :servlet.javapackage org.lxh.servletdemo;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet....
  • login_success.html: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here<...登录成功啦!...获取网站登录成功次数</a> </body> &
  • java 跳转语句

    2021-04-17 09:51:18
    java 支持 3 种跳转语句:break,continue 和return 。这些语句把控制转移到程序的其他部分。下面对每一种语句进行讨论。注重:除了这里讨论的跳转语句,Java 还支持另一种能改变你程序执行流程的方法:通过异常处理...
  • Java的循环跳转语句一:Java循环跳转语句之 break;生活中,我们经常会因为某些原因中断既定的任务安排。如在参加 10000 米长跑时,才跑了 500 米就由于体力不支,需要退出比赛。在 Java 中,我们可以使用 break ...
  • Java后端实现页面跳转

    千次阅读 2021-02-12 08:56:14
    页面跳转分类有两种:重定向和转发,即redirect和forward。具体区别和含义最后介绍,先给出使用方法。一:重定向redirect第一种方式:controller中返回值为Stringpublic String login(HttpServletRequest req, ...
  • 展开全部代码如下importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;publicclassRegFrameextendsJFrame{JTextFieldjtf=newJTextField(12);publicRegFrame(){JButtonjb=newJButton("登录:输入admin...
  • java web页面跳转 总结

    2021-02-12 20:19:19
    -------------------------------------------------------------------------------------------------- 在Java Web开发中,经常会用到跳转页面的方法,一般有下面两种方法。 Java代码 HttpServletResponse ...
  • Java中的goto是保留字,目前不能使用。...为了弥补这个缺陷,Java就提供了break,continue和return来实现控制语句的跳转和中断。break 中断continue 继续return 返回1. break关键字应用场景:用在switch case条件语...
  • Java中轻松实现界面跳转作者:兄弟连Java中轻松实现界面跳转,Java中轻松实现界面跳转假设这样一种情况,我们的系统的界面使用javax.swing包构建,界面的基础是BaseView,他是一个容器,当然他应当提供获取控件元素的功能...
  • java后端实现页面跳转的方法

    千次阅读 2021-02-12 08:56:13
    java后端实现页面跳转的方法发布时间:2020-06-16 11:32:24来源:亿速云阅读:262作者:Leah这篇文章将为大家详细讲解有关java后端实现页面跳转的方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这...
  • java中的action跳转

    2021-02-12 17:01:49
    小弟是才进入java开发领域的。用的是struts1.1,项目比较老了。JDK1.4,Hibernate3.0。之前做需求时遇到个问题,我一直没搞懂导致开发效率很低。我举例说明吧。就那User举例。比如说有...小弟是才进入java开发领域的...
  • 0.前言尽管Java的设计者将goto作为保留字,但实际上并没有打算在语言中使用它。通常,使用goto语句被认为是一种拙劣的程序设计风格。当然,也有一些程序员认为反对goto的呼声似乎有些过分(例如,Donald Knuth就曾...
  • java中的跳转语句

    2021-02-26 13:04:28
    java中的跳转语句有两种:break和continue;一、break语句1、 break语句适用于任何循环控制结构,从而是循环立即终止。当执行流程遇到break语句时,不管循环终止变量,或者布尔表达式的值是什么,控制流程都会跳到...
  • java按钮实现页面跳转

    千次阅读 2021-02-28 09:54:27
    假如有两个frame,分别为frame1,frame2,frame1加个按钮实现跳转.frame1代码如下import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.JButton;import javax.swing.JFrame;...
  • 总结: java后台跳转 @Controller下return一个String类型的跳转链接 注意:如果是@RestController注解下的controller,会将返回的字符串自动包进一个requestBody中,无法跳转到目标页面 exp: return “redirect: ...
  • java软件里面的跳转页面代码实现

    千次阅读 2021-02-25 18:50:39
    (2) response.sendRedirect()则是完全的跳转,浏览器将会得到跳转的地址,并重新发送请求链接。这样,从浏览器的地址栏中可以看到跳转后的链接地址。 前者更加高效,在前者可以满足需要时,尽量使用...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 376,916
精华内容 150,766
关键字:

java登录跳转

java 订阅