两个web项目,单点登录如何实现

现有两个不同Web工程项目,分别部署到两台was服务器上(was1、was2),
两个系统的用户、所属部门和菜单权限均是两个数据库db1、db2,两个web系统
的登录页面分别为index1.jsp、index2.jsp;
如何整合实现:通过一个登录页面,登录后可以操作两个web系统的功能菜单。(应该需要将用户整合到一个数据库表、部门也需要合并到一个库表,菜单是否要合并?)
不需要单加验证系统。

qq_34714376
qq_34714376 很少有人这么做吧。一般不都是用单点登录实现两个系统的访问吗?
9 个月之前 回复

3个回答

采用Token机制, Token存到Redis上面。 用户请求的时候 was1、was2 查询Redis 是否有Token 判断是否登录

不加单独验证系统?
那只能共享session了,通过redis服务器共享session,这样用户就可以在两个系统间切换,但是两个数据库的用户,部门信息必须合并 并同步,菜单如果两个系统是一样的需要合并并同步,如果是独立的则不需要。

如果能加单独验证系统
单独一个登录管理系统,登录成功后跳转到was1或者was2时在cookie中携带登录成功后的token信息,was1或者was2通过token向登录管理系统查询是否登录成功,登录则允许操作系统,否则跳转登录页面。

xinnian468153
迷路的公民 回复weixin_40137049: memcached也可以,这个样做法其实就相当于多个服务器负载均衡。
9 个月之前 回复
xinnian468153
迷路的公民 回复weixin_40137049: 你这是两台服务器,为了同步用户的session信息必须用redis这种内存数据库同步session
9 个月之前 回复
weixin_40137049
weixin_40137049 必须使用redis服务共享session吗?
9 个月之前 回复

百度SSO单点登录,这块涉及的技术比较多

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
java web 项目中,如何实现显示的页面带关键字搜索功能
在java web 项目中,如何给所有页面添加 关键字 查询功能,比如一个页面上有腾讯两个字,就将给腾讯两字添加一个链接到腾讯的信息,或者一个js用于控制小窗显示腾讯信息 诸如此类的功能
通过tomcat启动后的web项目如何跟另外一个java项目交互
项目经理让我完成对一个web项目的日志级别动态修改,要我提供一个接口用于修改日志级别, 我首先想到了使用servlet,通过访问servlet来修改,可项目经理却叫我用Main来实现这一功能,生成一个jar包 通过本地的脚本语言调用这个jar包的Main方法来修改日志级别。Socket也不能使用。 两个java程序在以上不能使用的方法外,还能可以使用哪些方法进行交互呢?
两个不同WEB系统之间限定条件的信息交互问题
1. 设存在两个web项目,分别是ProjectA和ProjectB,ProjectB不可修改,ProjectA可任意修改。 2. ProjectA存在a1页面,ProjectB存在b1页面。 3. b1页面实现的是账号、密码登陆功能。 4. a1页面存在一个按钮btn1,点击btn1则打开新的标签页且链接到b1页面,同时在a1页面中弹出提示“未登陆”。 5. 在新的标签页链接到的b1页面上登陆成功后,a1页面提示从“未登陆”转换为“登陆成功”。 6. 问如何实现以上功能,最好可以给出详细的算法和技术,再次强调注意几个限定的条件: a) ProjectA和ProjectB是两个不同项目,同时部署在tomcat上。 b) ProjectB不可修改。 c) 是否能在JavaScript上寻找可能性,还是浏览器插件。 7. 感谢提供想法的各位网友!
myeclipse创建两个项目,用webservice实现请求返回数据
想写一个用myeclipse创建的两个项目,一个发送http请求,一个接收并返回数据,用webservice怎么写,我是初学,有没有具体步骤或者案例,求大神指教啊~~
spring 一个配置文件如何被多个项目引用
项目是依赖maven管理的,现在需求是这样的 app-parent下的app-core、app-web1、app-web2为module,其中app-core是公用的代码实现,app-web1和app-web2是两个web网站项目,spring配置,其中applicationContext.xml需要引用SpringHibernate.xml文件<import resource="classpath:SpringHibernate.xml"/>, 但我想把SpringHibernate.xml放在app-core里公用,想被多个web项目引用 编译的时候提示找不到***SpringHibernate.xml文件 改如何配置呢
rxtxcomm在一个web页面循环读取多个串口数据的方法
首先,我用jquery 的ajax方式调用setInterval来实现对一个串口的数据实时读取,测试是没问题的。 但是当我在jsp页面用两个ajax分别调用两个不同的setInterval(每个setInterval都读取不同的com口返回数据)以后,java控制台会很快提示如下错误: ![图片说明](https://img-ask.csdn.net/upload/201708/31/1504147574_669333.png) 说明:我的每一个setInterval在单独测试的时候都可以很好的返回数据,但是两个一起循环的时候就开始出现以上错误了。 我的项目需要在一个web页面上同时显示2个串口的实时数据,请教是哪里出了问题? 和这个页面的问题描述的几乎一致:[问题详细描述](http://bbs.csdn.net/topics/390788747 "")
web项目架构问题,B/S结构,mysql数据库
现在客户有一个需求就是他们的产品不固定,比如我现在有一个轮胎产品(有很多型号) 和机油产品(有很多型号),由于这两个需求,我可能得在数据库里面弄一个轮胎表一个机油表(此时项目已经完工了)。 但是过了几个月后店内添加了新的产品并且该产品也会有很多的型号迫不得已又得弄一张表,这种实现如何使得用户能够在功能上实现呢?就是不用开发人员去维护,用户就能够自定义。 我们认为的难题在于项目启动后就算数据库里面可以创建一张新产品表格,但是该表格的实体类和功能该如何动态实现呢?
NGINX要发挥作用,实现负载均衡至少需要几台服务器呢?
1.NGINX要发挥作用,实现负载均衡至少需要几台服务器呢?(是三台吗?一台安装NGINX,其余两台分别部署Tomcat,启动web项目?然后由NGINX进行负载均衡反向代理吗?)(或者是两台吗?NGINX可以与其中一台Tomcat服务器共用一个主机?) 2.一台服务器上有安装NGINX的必要吗?(虽说一台机器NGINX可以分布式不同的Tomcat,但是我只有一个web项目呢?并没有多个网站) 3.当并发量高于多少的时候直接访问Tomcat和通过访问NGINX反向代理才能看出差距呢?(也就是说,当并发量高于多少才有必要使用NGINX) 4.一台高配性能的服务器,通过Tomcat部署项目,然后由Tomcat直接访问项目和两台半高配性能服务器(合起来相当于一台高配)使用了NGINX反向代理,负载均衡相比,那个稳定性更好,效果更好。
怎么实现jsp web 跨应用用户权限检测
一个应用商店网站,想把‘用户管理’和‘应用商店’放在两个不同的项目中。 1.请问怎么实现登录后 ‘用户管理’应用能检测到已经登录的用户, ‘应用商店’也能检测?并能够获取用户信息。 2.怎么实现注销后‘用户管理’和‘应用商店’能同时响应,求具体策略。
web项目中实体类序列化的原因?
在网上找了一下序列化的概念 我们知道,当两个进程进行远程通信时,可以相互发送各种类型的数据,包括文本、图片、音频、视频等, 而这些数据都会以二进制序列的形式在网络上传送。那么当两个Java进程进行通信时,能否实现进程间的对象传送呢?答案是可以的。如何做到呢?这就需要Java序列化与反序列化了。换句话说,一方面,发送方需要把这个Java对象转换为字节序列,然后在网络上传送;另一方面,接收方需要从字节序列中恢复出Java对象。 当我们明晰了为什么需要Java序列化和反序列化后,我们很自然地会想Java序列化的好处。其好处一是实现了数据的持久化,通过序列化可以把数据永久地保存到硬盘上(通常存放在文件里),二是,利用序列化实现远程通信,即在网络上传送对象的字节序列。 http://blog.csdn.net/wangloveall/article/details/7992448 最近看一个项目的时候,用的是spring +mybatis整合的框架,里面的实体类实现了Serializable接口,那么我想确认一下: 这里序列化的原因是为了将对象存到数据库吗? 如果在sql中没有存储与取出对象的操作,那么不序列化也是可以的??
JAVA远程备份oracle如何实现?
1、有两台服务器,一台是开TOMCAT保持WEB项目运行的应用服务器, 一台是装了ORACLE的数据库服务器; 2、需要在WEB项目上做一个备份数据库的功能, 用户点击按钮操作就能完成实时的数据库备份, 并把备份文件保存在WEB项目的应用服务器上; 3、WEB应用服务器上没有ORACLE的环境。
关于web上传文件到另一台服务器
项目现在要把项目中上传的文件,改为直接上传为指定的文件服务器,在网上找了一些资料,发现Unix和linux是有NFS(网络文件系统)实现。于是我想到了windows的网络磁盘映射,实现了上传到指定文件服务器的功能。后来又想到了在文件服务器上起一个web service服务来解决这个问题,也能实现上传到指定文件服务器的功能。请问一下这两个方案哪个方案更好一些?
java接口实现远程访问
做了一个小web项目,假设A和B两个服务器,A服务器中包含注册码字段 ,B要通过远程访问 将自己页面输入的注册码与A的注册码进行匹配,匹配成功B才可以正式使用,怎么实现啊,头儿一直在说接口接口 。 说是在action层 写个方法就可以了 不会啊 求大神们指点指点
c3p0连接mysql,两web配置驱动一样,一个正常连接,另一个就报错,望大手解答一下个
如题目所说,2个web项目,配置文件完全一致,除了数据库名称更改了一下,但就是一个可以正常连接并读取,另一个不可以.![图片说明](https://img-ask.csdn.net/upload/201901/05/1546694612_788442.jpg),![图片说明](https://img-ask.csdn.net/upload/201901/05/1546694646_180453.jpg) 这两个是数据库的截图,都在本地下,一个web15,一个web17. 接下来是两个数据库的具体配置及jar版本![图片说明](https://img-ask.csdn.net/upload/201901/05/1546694752_134502.jpg)15![图片说明](https://img-ask.csdn.net/upload/201901/05/1546694756_64169.jpg)17, 15可以正常读取并显示页面,这里我为了省事直接输出一行了![图片说明](https://img-ask.csdn.net/upload/201901/05/1546694917_605779.jpg),控制台也正常,![图片说明](https://img-ask.csdn.net/upload/201901/05/1546694967_209297.jpg). 但是到了17就直接报错了,是根本就连接不了数据库,直接出现错误,我是真的没招了,请大神解答一下,本来找的资料学习的结果出了这种情况真的难受.17控制台错误![图片说明](https://img-ask.csdn.net/upload/201901/05/1546695129_400901.jpg),17页面显示![图片说明](https://img-ask.csdn.net/upload/201901/05/1546695154_301226.jpg),17具体代码实现,Servlet![图片说明](https://img-ask.csdn.net/upload/201901/05/1546695229_352965.jpg),Jsp![图片说明](https://img-ask.csdn.net/upload/201901/05/1546695236_696564.jpg),15代码我就不贴了,基本一致,就是把javaBean改了改,然后把BeanListHandler里面的也改了改,总体思路是一致的,但是就是一个可以输出一个无法输出.顺带说下,我上网查了很多,都没用,权限也有,就是报错.
flask+mysql实现的web应用,在注册页面点击注册后提示 Instance '<User at 0x5486a10>' has been deleted?
##问题描述 从github(https://github.com/num10/transfile)上下载的一个用flask+mysql实现的转pdf成word的web应用,其中 涉及到新用户的注册: ![图片说明](https://img-ask.csdn.net/upload/201911/07/1573098094_252858.png) 可是在注册页面填完信息点击注册后前端报错如下: ![图片说明](https://img-ask.csdn.net/upload/201911/07/1573098203_905955.png) ``` sqlalchemy.orm.exc.ObjectDeletedError: Instance '<User at 0x58072f0>' has been deleted, or its row is otherwise not present. ``` 根据traceback的信息,定位到出错的位置应该是下图中的models.py和views.py文件 ![图片说明](https://img-ask.csdn.net/upload/201911/07/1573100399_404211.jpg) 后台关于这两个文件的报错信息为: ```ruby File "C:\Users\26808\transfile-master\app\auth\views.py", line 68, in register token = user.generate_confirmation_token() File "C:\Users\26808\transfile-master\app\models.py", line 142, in generate_confirmation_token return s.dumps({'confirm': self.id}).decode('utf-8') ``` 对应文件中: views.py: ```ruby @auth.route('/register', methods=['GET', 'POST']) def register(): form = RegistrationForm() if form.validate_on_submit(): user = User(email=form.email.data, username=form.username.data, password=form.password.data) db.session.add(user) db.session.commit() token = user.generate_confirmation_token() send_email(user.email, '认证您的账户', 'auth/email/confirm', user=user, token=token) flash('认证信息已发送至您的邮箱') return redirect(url_for('auth.login')) return render_template('auth/register.html', form=form) ``` models.py: ``` def generate_confirmation_token(self, expiration=3600): s = Serializer(current_app.config['SECRET_KEY'], expiration) return s.dumps({'confirm': self.id}).decode('utf-8') ``` ##补充 1.按照requirements文件的要求,flask都安装了正确的包 2.正如register函数中所写的那样,点击注册后用户信息会被加入mysql数据库中但是会被重复加入,即多次运行每次都出错,并且相同的用户被反复加入mysql数据库中 3.网上大多数都是通过app.run()来启动文件的,但是这个项目里面先要设置 ```set FLASK_APP = manage.py``` 在```flask run```才能运行 能解释一下为什么吗? manage.py代码如下: ```ruby #!/usr/bin/ python # -*- coding: UTF-8 -*- import os COV = None if os.environ.get('FLASK_COVERAGE'): import coverage COV = coverage.coverage(branch=True, include='app/*') COV.start() import sys import click from flask_migrate import Migrate,upgrade from app import create_app, db from app.models import User, Follow, Role, Permission, Post, Comment from flask_uploads import configure_uploads from app.auth.forms import pdfs,photos,words app = create_app(os.getenv('FLASK_CONFIG') or 'default') migrate = Migrate(app, db) configure_uploads(app, pdfs) configure_uploads(app, photos) configure_uploads(app, words) @app.shell_context_processor def make_shell_context(): return dict(db=db, User=User, Follow=Follow, Role=Role, Permission=Permission, Post=Post, Comment=Comment) @app.cli.command() @click.option('--coverage/--no-coverage', default=False, help='Run tests under code coverage.') def test(coverage=False): """Run the unit tests.""" if coverage and not os.environ.get('FLASK_COVERAGE'): import subprocess os.environ['FLASK_COVERAGE'] = '1' sys.exit(subprocess.call(sys.argv)) import unittest tests = unittest.TestLoader().discover('tests') unittest.TextTestRunner(verbosity=2).run(tests) if COV: COV.stop() COV.save() print('Coverage Summary:') COV.report() basedir = os.path.abspath(os.path.dirname(__file__)) covdir = os.path.join(basedir, 'tmp/coverage') COV.html_report(directory=covdir) print('HTML version: file://%s/index.html' % covdir) COV.erase() @app.cli.command() @click.option('--length', default=25, help='Number of functions to include in the profiler report.') @click.option('--profile-dir', default=None, help='Directory where profiler data files are saved.') def profile(length=25, profile_dir=None): """Start the application under the code profiler.""" from werkzeug.contrib.profiler import ProfilerMiddleware app.wsgi_app = ProfilerMiddleware(app.wsgi_app, restrictions=[length], profile_dir=profile_dir) app.run(debug=False) @app.cli.command() def deploy(): """Run deployment tasks.""" # migrate database to latest revision upgrade() # create or update user roles Role.insert_roles() # ensure all users are following themselves User.add_self_follows() if __name__ == '__main__': deploy() ``` 数据模型models.py: ``` #!/usr/bin/ python # -*- coding: UTF-8 -*- from datetime import datetime import hashlib from werkzeug.security import generate_password_hash, check_password_hash from itsdangerous import TimedJSONWebSignatureSerializer as Serializer from markdown import markdown import bleach from flask import current_app, request,url_for from flask_login import UserMixin, AnonymousUserMixin from . import db, login_manager class Permission: FOLLOW = 1 COMMENT = 2 WRITE = 4 MODERATE = 8 ADMIN = 16 class Role(db.Model): __tablename__ = 'roles' id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(64), unique=True) default = db.Column(db.Boolean, default=False, index=True) permissions = db.Column(db.Integer) users = db.relationship('User', backref='role', lazy='dynamic') def __init__(self, **kwargs): super(Role, self).__init__(**kwargs) if self.permissions is None: self.permissions = 0 @staticmethod def insert_roles(): roles = { 'User': [Permission.FOLLOW, Permission.COMMENT, Permission.WRITE], 'Moderator': [Permission.FOLLOW, Permission.COMMENT, Permission.WRITE, Permission.MODERATE], 'Administrator': [Permission.FOLLOW, Permission.COMMENT, Permission.WRITE, Permission.MODERATE, Permission.ADMIN], } default_role = 'User' for r in roles: role = Role.query.filter_by(name=r).first() if role is None: role = Role(name=r) role.reset_permissions() for perm in roles[r]: role.add_permission(perm) role.default = (role.name == default_role) db.session.add(role) db.session.commit() def add_permission(self, perm): if not self.has_permission(perm): self.permissions += perm def remove_permission(self, perm): if self.has_permission(perm): self.permissions -= perm def reset_permissions(self): self.permissions = 0 def has_permission(self, perm): return self.permissions & perm == perm def __repr__(self): return '<Role %r>' % self.name class Follow(db.Model): __tablename__ = 'follows' follower_id = db.Column(db.Integer, db.ForeignKey('users.id'), primary_key=True) followed_id = db.Column(db.Integer, db.ForeignKey('users.id'), primary_key=True) timestamp = db.Column(db.DateTime, default=datetime.utcnow) class User(UserMixin, db.Model): __tablename__ = 'users' id = db.Column(db.Integer, primary_key=True) email = db.Column(db.String(64), unique=True, index=True) username = db.Column(db.String(64), unique=True, index=True) role_id = db.Column(db.Integer, db.ForeignKey('roles.id')) password_hash = db.Column(db.String(128)) confirmed = db.Column(db.Boolean, default=False) name = db.Column(db.String(64)) location = db.Column(db.String(64)) about_me = db.Column(db.Text()) member_since = db.Column(db.DateTime(), default=datetime.utcnow) last_seen = db.Column(db.DateTime(), default=datetime.utcnow) avatar_hash = db.Column(db.String(32)) posts = db.relationship('Post', backref='author', lazy='dynamic') followed = db.relationship('Follow', foreign_keys=[Follow.follower_id], backref=db.backref('follower', lazy='joined'), lazy='dynamic', cascade='all, delete-orphan') followers = db.relationship('Follow', foreign_keys=[Follow.followed_id], backref=db.backref('followed', lazy='joined'), lazy='dynamic', cascade='all, delete-orphan') comments = db.relationship('Comment', backref='author', lazy='dynamic') @staticmethod def add_self_follows(): for user in User.query.all(): if not user.is_following(user): user.follow(user) db.session.add(user) db.session.commit() def __init__(self, **kwargs): super(User, self).__init__(**kwargs) if self.role is None: if self.email == current_app.config['FLASKY_ADMIN']: self.role = Role.query.filter_by(name='Administrator').first() if self.role is None: self.role = Role.query.filter_by(default=True).first() if self.email is not None and self.avatar_hash is None: self.avatar_hash = self.gravatar_hash() self.follow(self) @property def password(self): raise AttributeError('password is not a readable attribute') @password.setter def password(self, password): self.password_hash = generate_password_hash(password) def verify_password(self, password): return check_password_hash(self.password_hash, password) def generate_confirmation_token(self, expiration=3600): s = Serializer(current_app.config['SECRET_KEY'], expiration) return s.dumps({'confirm': self.id}).decode('utf-8') def confirm(self, token): s = Serializer(current_app.config['SECRET_KEY']) try: data = s.loads(token.encode('utf-8')) except: return False if data.get('confirm') != self.id: return False self.confirmed = True db.session.add(self) return True def generate_reset_token(self, expiration=3600): s = Serializer(current_app.config['SECRET_KEY'], expiration) return s.dumps({'reset': self.id}).decode('utf-8') @staticmethod def reset_password(token, new_password): s = Serializer(current_app.config['SECRET_KEY']) try: data = s.loads(token.encode('utf-8')) except: return False user = User.query.get(data.get('reset')) if user is None: return False user.password = new_password db.session.add(user) return True def can(self, perm): return self.role is not None and self.role.has_permission(perm) def is_administrator(self): return self.can(Permission.ADMIN) def ping(self): self.last_seen = datetime.utcnow() db.session.add(self) def gravatar_hash(self): return hashlib.md5(self.email.lower().encode('utf-8')).hexdigest() def gravatar(self, size=100, default='identicon', rating='g'): url = 'https://secure.gravatar.com/avatar' hash = self.avatar_hash or self.gravatar_hash() return '{url}/{hash}?s={size}&d={default}&r={rating}'.format( url=url, hash=hash, size=size, default=default, rating=rating) def follow(self, user): if not self.is_following(user): f = Follow(follower=self, followed=user) db.session.add(f) def unfollow(self, user): f = self.followed.filter_by(followed_id=user.id).first() if f: db.session.delete(f) def is_following(self, user): if user.id is None: return False return self.followed.filter_by( followed_id=user.id).first() is not None def is_followed_by(self, user): if user.id is None: return False return self.followers.filter_by( follower_id=user.id).first() is not None @property def followed_posts(self): return Post.query.join(Follow, Follow.followed_id == Post.author_id)\ .filter(Follow.follower_id == self.id) def to_json(self): json_user = { 'url': url_for('api.get_user', id=self.id), 'username': self.username, 'member_since': self.member_since, 'last_seen': self.last_seen, 'posts_url': url_for('api.get_user_posts', id=self.id), 'followed_posts_url': url_for('api.get_user_followed_posts', id=self.id), 'post_count': self.posts.count() } return json_user def generate_auth_token(self, expiration): s = Serializer(current_app.config['SECRET_KEY'], expires_in=expiration) return s.dumps({'id': self.id}).decode('utf-8') @staticmethod def verify_auth_token(token): s = Serializer(current_app.config['SECRET_KEY']) try: data = s.loads(token) except: return None return User.query.get(data['id']) def __repr__(self): return '<User %r>' % self.username class AnonymousUser(AnonymousUserMixin): def can(self, permissions): return False def is_administrator(self): return False login_manager.anonymous_user = AnonymousUser @login_manager.user_loader def load_user(user_id): return User.query.get(int(user_id)) class Post(db.Model): __tablename__ = 'posts' id = db.Column(db.Integer, primary_key=True) body = db.Column(db.Text) body_html = db.Column(db.Text) timestamp = db.Column(db.DateTime, index=True, default=datetime.utcnow) author_id = db.Column(db.Integer, db.ForeignKey('users.id')) comments = db.relationship('Comment', backref='post', lazy='dynamic') @staticmethod def on_changed_body(target, value, oldvalue, initiator): allowed_tags = ['a', 'abbr', 'acronym', 'b', 'blockquote', 'code', 'em', 'i', 'li', 'ol', 'pre', 'strong', 'ul', 'h1', 'h2', 'h3', 'p'] target.body_html = bleach.linkify(bleach.clean( markdown(value, output_format='html'), tags=allowed_tags, strip=True)) def to_json(self): json_post = { 'url': url_for('api.get_post', id=self.id), 'body': self.body, 'body_html': self.body_html, 'timestamp': self.timestamp, 'author_url': url_for('api.get_user', id=self.author_id), 'comments_url': url_for('api.get_post_comments', id=self.id), 'comment_count': self.comments.count() } return json_post @staticmethod def from_json(json_post): body = json_post.get('body') if body is None or body == '': raise ValidationError('post does not have a body') return Post(body=body) db.event.listen(Post.body, 'set', Post.on_changed_body) class Comment(db.Model): __tablename__ = 'comments' id = db.Column(db.Integer, primary_key=True) body = db.Column(db.Text) body_html = db.Column(db.Text) timestamp = db.Column(db.DateTime, index=True, default=datetime.utcnow) disabled = db.Column(db.Boolean) author_id = db.Column(db.Integer, db.ForeignKey('users.id')) post_id = db.Column(db.Integer, db.ForeignKey('posts.id')) @staticmethod def on_changed_body(target, value, oldvalue, initiator): allowed_tags = ['a', 'abbr', 'acronym', 'b', 'code', 'em', 'i', 'strong'] target.body_html = bleach.linkify(bleach.clean( markdown(value, output_format='html'), tags=allowed_tags, strip=True)) db.event.listen(Comment.body, 'set', Comment.on_changed_body) ```
java Socket服务端反向查数据
需求是 两个java web项目,用socket实现数据即时查询 client向server注册,并保持连接 server向client发送请求,client返回数据。 我现在不知道怎么用ServerSocket向Socket对象发送请求,并且能得到回复。 帮我考虑一下,多谢。
关于tomcat运行时发现的一次错误问题,希望有大佬能排忧解难一下,感谢
最近在进行一个小型的web工程开发,这个web是做运维局域网内服务器的平台,项目的基本功能现在已经实现的差不多了,但是在发布部署在tomcat上碰到了一些问题,因缺乏这方面的认识,无法定位准确的问题所在。 问题是这样的,在局域网内,一台服务器用的是centos,在tomcat上部署web应用,当我把war工程文件放到tomcat目录底下的webapps中,一切都如自己所想的那样子正常运行,功能都可以使用,然后接着在本机ecilpse上继续优化升级代码方面的事情,某一天当我再去访问这个项目时,提示告诉我无法连接到这个ip:端口号/项目名,然后我就去试着ping两台机器,发现一切都正常,之后我就在这个服务器上单独本地访问web项目(非开发的电脑,部署测试的),访问localhost去看是否能访问这个部署在tomcat的项目(仅有一个),发现,服务器自己都不能访问的到这个web,之后我直接访问这个tomcat服务器(就是localhost:8080),发现那只猫的界面也访问不了,尝试了半天,发现都没怎么用,之后重启了tomcat就能正常访问了,现在大致归纳了几个点问题 1、内存溢出(百度告诉说这样子像是tomcat假死现象,需要设置什么jvm参数) 2、查阅tomcat日志发现说socket打开太多了,超出了限制(疑似web程序中有操作流的方法,但是我每次使用完都会释放掉资源close掉的,但是在后台中,有写了一些定时任务)![图片说明](https://img-ask.csdn.net/upload/201909/11/1568197140_31882.png) 3、关于tomcat进程用命令查看了一番,也没发现个啥问题, 4、有的说是和这个限制数有关![图片说明](https://img-ask.csdn.net/upload/201909/11/1568197277_710199.png) 但是我修改了限制但是也还是没有任何反应; 能有大佬教教我改怎么定位到这个问题吗? -------------------------------------------------------------------- 项目用的是ssm(Mybatis/SpringMvc/Struts2)的框架 tomcat7服务器,端口已经把默认的8080改成没占用过的其他端口
SpringBoot项目中加入spring session后每次请求接口获取到的sessionId都不一致是什么请款
我在项目中按照这个方法: https://www.cnblogs.com/yanggb/p/10886520.html 加入spring session想实现session的共享,但是我现在不跨域访问,每次请求接口的时候获取到的sessionId都不一致是什么原因导致的呢? 后来我把下面这两段代码注释掉请求获取到的sessionId就一样了 ``` package com.test.common.config; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis.connection.RedisStandaloneConfiguration; import org.springframework.data.redis.connection.jedis.JedisConnectionFactory; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession; @EnableRedisHttpSession(maxInactiveIntervalInSeconds = 3600) public class SessionConfig { @Value("${redis.hostname:localhost}") private String hostName; @Value("${redis.port:6379}") private int port; // @Value("${redis.password}") // private String password; @Bean public JedisConnectionFactory jedisConnectionFactory(){ RedisStandaloneConfiguration redisStandaloneConfiguration=new RedisStandaloneConfiguration(); redisStandaloneConfiguration.setHostName(hostName); redisStandaloneConfiguration.setPort(port); // redisStandaloneConfiguration.setPassword(password); redisStandaloneConfiguration.setDatabase(0); return new JedisConnectionFactory(redisStandaloneConfiguration); } @Bean public StringRedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory){ return new StringRedisTemplate(redisConnectionFactory); } } ``` ``` package com.test.user.config; import com.test.common.config.SessionConfig; import org.springframework.session.web.context.AbstractHttpSessionApplicationInitializer; public class RedisSessionInitializer extends AbstractHttpSessionApplicationInitializer { public RedisSessionInitializer(){ super(SessionConfig.class); } } ``` 问题出在哪里啊~ 下面是我后台打印的日志: ![图片说明](https://img-ask.csdn.net/upload/201911/08/1573199256_608561.png)
servlet跨web请求方法
现在在做一个项目(系统A),是用java+struts1+webLogic写的。PM说有另外一个系统(系统B)要调用我们的系统,让写一个外部的API。协议是Https,方法是servlet(post提交)+json。我简单模拟了A系统(tomcat+servlet),想做的事情是画面上有两个Text框: <input type="text" name="before" /> <input type="text" name="after" /> 在before中输入数字1,然后提交到后台调用service()方法,在方法里将before作为参数去请求调用系统B的接口,接口内容比方是让before+1,再把结果返回到系统A的画面after里。请教各位帮忙搭一下两边的架子: 1.用什么方法去请求,请求的路径是什么样的结构 2.参数的传递与返回 3.接口是怎样定义的以及如何调用 在网上查了好久,就是找不到自己需要的。试了下RequestDispatcher,要求请求的地址以“/”为开头,是在一个系统里。而我这2个系统是用的不一样的Web端口,所以感觉RequestDispatcher不能实现。
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它是一个过程,是一个不断累积、不断沉淀、不断总结、善于传达自己的个人见解以及乐于分享的过程。
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过...
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
linux系列之常用运维命令整理笔录
本博客记录工作中需要的linux运维命令,大学时候开始接触linux,会一些基本操作,可是都没有整理起来,加上是做开发,不做运维,有些命令忘记了,所以现在整理成博客,当然vi,文件操作等就不介绍了,慢慢积累一些其它拓展的命令,博客不定时更新 free -m 其中:m表示兆,也可以用g,注意都要小写 Men:表示物理内存统计 total:表示物理内存总数(total=used+free) use...
比特币原理详解
一、什么是比特币 比特币是一种电子货币,是一种基于密码学的货币,在2008年11月1日由中本聪发表比特币白皮书,文中提出了一种去中心化的电子记账系统,我们平时的电子现金是银行来记账,因为银行的背后是国家信用。去中心化电子记账系统是参与者共同记账。比特币可以防止主权危机、信用风险。其好处不多做赘述,这一层面介绍的文章很多,本文主要从更深层的技术原理角度进行介绍。 二、问题引入 假设现有4个人...
程序员接私活怎样防止做完了不给钱?
首先跟大家说明一点,我们做 IT 类的外包开发,是非标品开发,所以很有可能在开发过程中会有这样那样的需求修改,而这种需求修改很容易造成扯皮,进而影响到费用支付,甚至出现做完了项目收不到钱的情况。 那么,怎么保证自己的薪酬安全呢? 我们在开工前,一定要做好一些证据方面的准备(也就是“讨薪”的理论依据),这其中最重要的就是需求文档和验收标准。一定要让需求方提供这两个文档资料作为开发的基础。之后开发...
网页实现一个简单的音乐播放器(大佬别看。(⊙﹏⊙))
今天闲着无事,就想写点东西。然后听了下歌,就打算写个播放器。 于是乎用h5 audio的加上js简单的播放器完工了。 演示地点演示 html代码如下` music 这个年纪 七月的风 音乐 ` 然后就是css`*{ margin: 0; padding: 0; text-decoration: none; list-...
Python十大装B语法
Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并附上详细的实例代码。如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会极大提升代码B格,使之看上去更老练,读起来更优雅。
数据库优化 - SQL优化
以实际SQL入手,带你一步一步走上SQL优化之路!
通俗易懂地给女朋友讲:线程池的内部原理
餐盘在灯光的照耀下格外晶莹洁白,女朋友拿起红酒杯轻轻地抿了一小口,对我说:“经常听你说线程池,到底线程池到底是个什么原理?”
经典算法(5)杨辉三角
杨辉三角 是经典算法,这篇博客对它的算法思想进行了讲解,并有完整的代码实现。
使用 Docker 部署 Spring Boot 项目
Docker 技术发展为微服务落地提供了更加便利的环境,使用 Docker 部署 Spring Boot 其实非常简单,这篇文章我们就来简单学习下。首先构建一个简单的 S...
英特尔不为人知的 B 面
从 PC 时代至今,众人只知在 CPU、GPU、XPU、制程、工艺等战场中,英特尔在与同行硬件芯片制造商们的竞争中杀出重围,且在不断的成长进化中,成为全球知名的半导体公司。殊不知,在「刚硬」的背后,英特尔「柔性」的软件早已经做到了全方位的支持与支撑,并持续发挥独特的生态价值,推动产业合作共赢。 而对于这一不知人知的 B 面,很多人将其称之为英特尔隐形的翅膀,虽低调,但是影响力却不容小觑。 那么,在...
面试官:你连RESTful都不知道我怎么敢要你?
干货,2019 RESTful最贱实践
刷了几千道算法题,这些我私藏的刷题网站都在这里了!
遥想当年,机缘巧合入了 ACM 的坑,周边巨擘林立,从此过上了"天天被虐似死狗"的生活… 然而我是谁,我可是死狗中的战斗鸡,智力不够那刷题来凑,开始了夜以继日哼哧哼哧刷题的日子,从此"读题与提交齐飞, AC 与 WA 一色 ",我惊喜的发现被题虐既刺激又有快感,那一刻我泪流满面。这么好的事儿作为一个正直的人绝不能自己独享,经过激烈的颅内斗争,我决定把我私藏的十几个 T 的,阿不,十几个刷题网...
白话阿里巴巴Java开发手册高级篇
不久前,阿里巴巴发布了《阿里巴巴Java开发手册》,总结了阿里巴巴内部实际项目开发过程中开发人员应该遵守的研发流程规范,这些流程规范在一定程度上能够保证最终的项目交付质量,通过在时间中总结模式,并推广给广大开发人员,来避免研发人员在实践中容易犯的错误,确保最终在大规模协作的项目中达成既定目标。 无独有偶,笔者去年在公司里负责升级和制定研发流程、设计模板、设计标准、代码标准等规范,并在实际工作中进行...
SQL-小白最佳入门sql查询一
不要偷偷的查询我的个人资料,即使你再喜欢我,也不要这样,真的不好;
redis分布式锁,面试官请随便问,我都会
文章有点长并且绕,先来个图片缓冲下! 前言 现在的业务场景越来越复杂,使用的架构也就越来越复杂,分布式、高并发已经是业务要求的常态。像腾讯系的不少服务,还有CDN优化、异地多备份等处理。 说到分布式,就必然涉及到分布式锁的概念,如何保证不同机器不同线程的分布式锁同步呢? 实现要点 互斥性,同一时刻,智能有一个客户端持有锁。 防止死锁发生,如果持有锁的客户端崩溃没有主动释放锁,也要保证锁可以正常释...
项目中的if else太多了,该怎么重构?
介绍 最近跟着公司的大佬开发了一款IM系统,类似QQ和微信哈,就是聊天软件。我们有一部分业务逻辑是这样的 if (msgType = "文本") { // dosomething } else if(msgType = "图片") { // doshomething } else if(msgType = "视频") { // doshomething } else { // doshom...
Nginx 原理和架构
Nginx 是一个免费的,开源的,高性能的 HTTP 服务器和反向代理,以及 IMAP / POP3 代理服务器。Nginx 以其高性能,稳定性,丰富的功能,简单的配置和低资源消耗而闻名。 Nginx 的整体架构 Nginx 里有一个 master 进程和多个 worker 进程。master 进程并不处理网络请求,主要负责调度工作进程:加载配置、启动工作进程及非停升级。worker 进程负责处...
“狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作
一、垃圾文字生成器介绍 最近在浏览GitHub的时候,发现了这样一个骨骼清奇的雷人项目,而且热度还特别高。 项目中文名:狗屁不通文章生成器 项目英文名:BullshitGenerator 根据作者的介绍,他是偶尔需要一些中文文字用于GUI开发时测试文本渲染,因此开发了这个废话生成器。但由于生成的废话实在是太过富于哲理,所以最近已经被小伙伴们给玩坏了。 他的文风可能是这样的: 你发现,...
程序员:我终于知道post和get的区别
是一个老生常谈的话题,然而随着不断的学习,对于以前的认识有很多误区,所以还是需要不断地总结的,学而时习之,不亦说乎
《程序人生》系列-这个程序员只用了20行代码就拿了冠军
你知道的越多,你不知道的越多 点赞再看,养成习惯GitHub上已经开源https://github.com/JavaFamily,有一线大厂面试点脑图,欢迎Star和完善 前言 这一期不算《吊打面试官》系列的,所有没前言我直接开始。 絮叨 本来应该是没有这期的,看过我上期的小伙伴应该是知道的嘛,双十一比较忙嘛,要值班又要去帮忙拍摄年会的视频素材,还得搞个程序员一天的Vlog,还要写BU...
加快推动区块链技术和产业创新发展,2019可信区块链峰会在京召开
11月8日,由中国信息通信研究院、中国通信标准化协会、中国互联网协会、可信区块链推进计划联合主办,科技行者协办的2019可信区块链峰会将在北京悠唐皇冠假日酒店开幕。   区块链技术被认为是继蒸汽机、电力、互联网之后,下一代颠覆性的核心技术。如果说蒸汽机释放了人类的生产力,电力解决了人类基本的生活需求,互联网彻底改变了信息传递的方式,区块链作为构造信任的技术有重要的价值。   1...
Java世界最常用的工具类库
Apache Commons Apache Commons有很多子项目 Google Guava 参考博客
程序员把地府后台管理系统做出来了,还有3.0版本!12月7号最新消息:已在开发中有github地址
第一幕:缘起 听说阎王爷要做个生死簿后台管理系统,我们派去了一个程序员…… 996程序员做的梦: 第一场:团队招募 为了应对地府管理危机,阎王打算找“人”开发一套地府后台管理系统,于是就在地府总经办群中发了项目需求。 话说还是中国电信的信号好,地府都是满格,哈哈!!! 经常会有外行朋友问:看某网站做的不错,功能也简单,你帮忙做一下? 而这次,面对这样的需求,这个程序员...
网易云6亿用户音乐推荐算法
网易云音乐是音乐爱好者的集聚地,云音乐推荐系统致力于通过 AI 算法的落地,实现用户千人千面的个性化推荐,为用户带来不一样的听歌体验。 本次分享重点介绍 AI 算法在音乐推荐中的应用实践,以及在算法落地过程中遇到的挑战和解决方案。 将从如下两个部分展开: AI算法在音乐推荐中的应用 音乐场景下的 AI 思考 从 2013 年 4 月正式上线至今,网易云音乐平台持续提供着:乐屏社区、UGC...
【技巧总结】位运算装逼指南
位算法的效率有多快我就不说,不信你可以去用 10 亿个数据模拟一下,今天给大家讲一讲位运算的一些经典例子。不过,最重要的不是看懂了这些例子就好,而是要在以后多去运用位运算这些技巧,当然,采用位运算,也是可以装逼的,不信,你往下看。我会从最简单的讲起,一道比一道难度递增,不过居然是讲技巧,那么也不会太难,相信你分分钟看懂。 判断奇偶数 判断一个数是基于还是偶数,相信很多人都做过,一般的做法的代码如下...
为什么要学数据结构?
一、前言 在可视化化程序设计的今天,借助于集成开发环境可以很快地生成程序,程序设计不再是计算机专业人员的专利。很多人认为,只要掌握几种开发工具就可以成为编程高手,其实,这是一种误解。要想成为一个专业的开发人员,至少需要以下三个条件: 1) 能够熟练地选择和设计各种数据结构和算法 2) 至少要能够熟练地掌握一门程序设计语言 3) 熟知所涉及的相关应用领域的知识 其中,后两个条件比较容易实现,而第一个...
Android 9.0 init 启动流程
阅读五分钟,每日十点,和您一起终身学习,这里是程序员Android本篇文章主要介绍Android开发中的部分知识点,通过阅读本篇文章,您将收获以下内容:一、启动流程概述一、 启动流程概述Android启动流程跟Linux启动类似,大致分为如下五个阶段。1.开机上电,加载固化的ROM。2.加载BootLoader,拉起Android OS。3.加载Uboot,初始外设,引导Kernel启动等。...
相关热词 基于c#波形控件 c# 十进制转十六进制 对文件aes加密vc# c#读取栈中所有的值 c# rsa256加密 好 学c# 还是c++ c# 和java的差距 c# curl网络框架 c# https证书请求 c# 中崎
立即提问

相似问题

4
Tomcat下部署两个war包项目 使用Log4j 接管 catalina.out 日志文件生成方式
8
javascript怎么实现两个数组中随机两个相加?相加的结果用alet方式进行输出?
2
求教:web平台自动登录
0
特定浏览器打开web项目出现Network Error问题
2
java项目导入另外一个项目打成的jar包,项目和jar项目的数据库数据源不同,如何调用jar的dao层方法执行。
3
两个maven项目,A项目需要mysql,B项目需要依赖A项目,在B项目中写A项目的mysql配置可以吗?
1
怎么使用angular tm-pagination实现一个页面中两个分页?
1
如何实现两个程序间的通信?
2
用不同特征训练两个SVM分类器检测同一种目标容易实现吗?
2
用函数编程实现两个数组数值的交换,要求要用到指针?
1
请问javascript两个定时器一个结束另一个开始一直循环要怎么实现。
5
【java】一个项目有两个相同的类,会出问题么?
2
如何在两台完全不同的系统上实现单点登陆?
2
Nginx中监听两个uwsgi端口,实现可以访问两个Django项目,是不是必须要有域名才可以?
1
android 如何实现通话录音时将己方和对方的声音分别录制为两个pcm?
4
我使用idea双开了两个项目,然后报tomcat8080错误?
1
servlet 在常规的web项目里面为什么是单例,寻找源码地址
1
myeclipseCI2018.12.0新建web项目目录结构没有webroot。
2
android studio导入的module怎么实现与主程序合并为一个项目?
2
为什么两个局域网不能ping通,qq是怎么连接两个局域网的?远程控制又是怎么实现的?