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

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

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

3个回答

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

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

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

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

百度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数据库
现在客户有一个需求就是他们的产品不固定,比如我现在有一个轮胎产品(有很多型号) 和机油产品(有很多型号),由于这两个需求,我可能得在数据库里面弄一个轮胎表一个机油表(此时项目已经完工了)。 但是过了几个月后店内添加了新的产品并且该产品也会有很多的型号迫不得已又得弄一张表,这种实现如何使得用户能够在功能上实现呢?就是不用开发人员去维护,用户就能够自定义。 我们认为的难题在于项目启动后就算数据库里面可以创建一张新产品表格,但是该表格的实体类和功能该如何动态实现呢?
怎么实现jsp web 跨应用用户权限检测
一个应用商店网站,想把‘用户管理’和‘应用商店’放在两个不同的项目中。 1.请问怎么实现登录后 ‘用户管理’应用能检测到已经登录的用户, ‘应用商店’也能检测?并能够获取用户信息。 2.怎么实现注销后‘用户管理’和‘应用商店’能同时响应,求具体策略。
NGINX要发挥作用,实现负载均衡至少需要几台服务器呢?
1.NGINX要发挥作用,实现负载均衡至少需要几台服务器呢?(是三台吗?一台安装NGINX,其余两台分别部署Tomcat,启动web项目?然后由NGINX进行负载均衡反向代理吗?)(或者是两台吗?NGINX可以与其中一台Tomcat服务器共用一个主机?) 2.一台服务器上有安装NGINX的必要吗?(虽说一台机器NGINX可以分布式不同的Tomcat,但是我只有一个web项目呢?并没有多个网站) 3.当并发量高于多少的时候直接访问Tomcat和通过访问NGINX反向代理才能看出差距呢?(也就是说,当并发量高于多少才有必要使用NGINX) 4.一台高配性能的服务器,通过Tomcat部署项目,然后由Tomcat直接访问项目和两台半高配性能服务器(合起来相当于一台高配)使用了NGINX反向代理,负载均衡相比,那个稳定性更好,效果更好。
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里面的也改了改,总体思路是一致的,但是就是一个可以输出一个无法输出.顺带说下,我上网查了很多,都没用,权限也有,就是报错.
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改成没占用过的其他端口
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) ```
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后台提供接口服务。同时,针对小程序提交的数据需要登录后台管理系统审核。 实现方式很纠结,希望大神解惑: 1.最简单的办法是把管理后台与小程序api接口放到一个web工程。这样的坏处是/admin和/api在一个工程下,无法控制/admin只在内网访问,如果有人抓到api的地址可以访问admin登录页面。后台更新需要整个工程重新发版。 2.分成两个war,登录和前台api分开能保证两边相互独立,但是后台访问的表与前台访问的表有重复,两个应用操作同一个数据库。 大家帮忙找个好的解决方案吧 ======================== 最终还是使用了1,由于项目比较小,不想折腾了
终于明白阿里百度这样的大公司,为什么面试经常拿ThreadLocal考验求职者了
点击上面↑「爱开发」关注我们每晚10点,捕获技术思考和创业资源洞察什么是ThreadLocalThreadLocal是一个本地线程副本变量工具类,各个线程都拥有一份线程私有的数
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过
Linux(服务器编程):15---两种高效的事件处理模式(reactor模式、proactor模式)
前言 同步I/O模型通常用于实现Reactor模式 异步I/O模型则用于实现Proactor模式 最后我们会使用同步I/O方式模拟出Proactor模式 一、Reactor模式 Reactor模式特点 它要求主线程(I/O处理单元)只负责监听文件描述符上是否有事件发生,有的话就立即将时间通知工作线程(逻辑单元)。除此之外,主线程不做任何其他实质性的工作 读写数据,接受新的连接,以及处...
阿里面试官问我:如何设计秒杀系统?我的回答让他比起大拇指
你知道的越多,你不知道的越多 点赞再看,养成习惯 GitHub上已经开源 https://github.com/JavaFamily 有一线大厂面试点脑图和个人联系方式,欢迎Star和指教 前言 Redis在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在Redis的使用和原理方面对小伙伴们进行360°的刁难。 作为一个在互联网公司面一次拿一次Offer的面霸,打败了...
五年程序员记流水账式的自白。
不知觉已中码龄已突破五年,一路走来从起初铁憨憨到现在的十九线程序员,一路成长,虽然不能成为高工,但是也能挡下一面,从15年很火的android开始入坑,走过java、.Net、QT,目前仍处于android和.net交替开发中。 毕业到现在一共就职过两家公司,目前是第二家,公司算是半个创业公司,所以基本上都会身兼多职。比如不光要写代码,还要写软著、软著评测、线上线下客户对接需求收集...
C语言魔塔游戏
很早就很想写这个,今天终于写完了。 游戏截图: 编译环境: VS2017 游戏需要一些图片,如果有想要的或者对游戏有什么看法的可以加我的QQ 2985486630 讨论,如果暂时没有回应,可以在博客下方留言,到时候我会看到。 下面我来介绍一下游戏的主要功能和实现方式 首先是玩家的定义,使用结构体,这个名字是可以自己改变的 struct gamerole { char n
一文详尽系列之模型评估指标
点击上方“Datawhale”,选择“星标”公众号第一时间获取价值内容在机器学习领域通常会根据实际的业务场景拟定相应的不同的业务指标,针对不同机器学习问题如回归、分类、排...
究竟你适不适合买Mac?
我清晰的记得,刚买的macbook pro回到家,开机后第一件事情,就是上了淘宝网,花了500元钱,找了一个上门维修电脑的师傅,上门给我装了一个windows系统。。。。。。 表砍我。。。 当时买mac的初衷,只是想要个固态硬盘的笔记本,用来运行一些复杂的扑克软件。而看了当时所有的SSD笔记本后,最终决定,还是买个好(xiong)看(da)的。 已经有好几个朋友问我mba怎么样了,所以今天尽量客观
程序员一般通过什么途径接私活?
二哥,你好,我想知道一般程序猿都如何接私活,我也想接,能告诉我一些方法吗? 上面是一个读者“烦不烦”问我的一个问题。其实不止是“烦不烦”,还有很多读者问过我类似这样的问题。 我接的私活不算多,挣到的钱也没有多少,加起来不到 20W。说实话,这个数目说出来我是有点心虚的,毕竟太少了,大家轻喷。但我想,恰好配得上“一般程序员”这个称号啊。毕竟苍蝇再小也是肉,我也算是有经验的人了。 唾弃接私活、做外...
压测学习总结(1)——高并发性能指标:QPS、TPS、RT、吞吐量详解
一、QPS,每秒查询 QPS:Queries Per Second意思是“每秒查询率”,是一台服务器每秒能够相应的查询次数,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。互联网中,作为域名系统服务器的机器的性能经常用每秒查询率来衡量。 二、TPS,每秒事务 TPS:是TransactionsPerSecond的缩写,也就是事务数/秒。它是软件测试结果的测量单位。一个事务是指一...
Python爬虫爬取淘宝,京东商品信息
小编是一个理科生,不善长说一些废话。简单介绍下原理然后直接上代码。 使用的工具(Python+pycharm2019.3+selenium+xpath+chromedriver)其中要使用pycharm也可以私聊我selenium是一个框架可以通过pip下载 pip install selenium -i https://pypi.tuna.tsinghua.edu.cn/simple/ 
阿里程序员写了一个新手都写不出的低级bug,被骂惨了。
这种新手都不会范的错,居然被一个工作好几年的小伙子写出来,差点被当场开除了。
Java工作4年来应聘要16K最后没要,细节如下。。。
前奏: 今天2B哥和大家分享一位前几天面试的一位应聘者,工作4年26岁,统招本科。 以下就是他的简历和面试情况。 基本情况: 专业技能: 1、&nbsp;熟悉Sping了解SpringMVC、SpringBoot、Mybatis等框架、了解SpringCloud微服务 2、&nbsp;熟悉常用项目管理工具:SVN、GIT、MAVEN、Jenkins 3、&nbsp;熟悉Nginx、tomca
2020年,冯唐49岁:我给20、30岁IT职场年轻人的建议
点击“技术领导力”关注∆  每天早上8:30推送 作者| Mr.K   编辑| Emma 来源| 技术领导力(ID:jishulingdaoli) 前天的推文《冯唐:职场人35岁以后,方法论比经验重要》,收到了不少读者的反馈,觉得挺受启发。其实,冯唐写了不少关于职场方面的文章,都挺不错的。可惜大家只记住了“春风十里不如你”、“如何避免成为油腻腻的中年人”等不那么正经的文章。 本文整理了冯
程序员该看的几部电影
##1、骇客帝国(1999) 概念:在线/离线,递归,循环,矩阵等 剧情简介: 不久的将来,网络黑客尼奥对这个看似正常的现实世界产生了怀疑。 他结识了黑客崔妮蒂,并见到了黑客组织的首领墨菲斯。 墨菲斯告诉他,现实世界其实是由一个名叫“母体”的计算机人工智能系统控制,人们就像他们饲养的动物,没有自由和思想,而尼奥就是能够拯救人类的救世主。 可是,救赎之路从来都不会一帆风顺,到底哪里才是真实的世界?
Python绘图,圣诞树,花,爱心 | Turtle篇
每周每日,分享Python实战代码,入门资料,进阶资料,基础语法,爬虫,数据分析,web网站,机器学习,深度学习等等。 公众号回复【进群】沟通交流吧,QQ扫码进群学习吧 微信群 QQ群 1.画圣诞树 import turtle screen = turtle.Screen() screen.setup(800,600) circle = turtle.Turtle()...
作为一个程序员,CPU的这些硬核知识你必须会!
CPU对每个程序员来说,是个既熟悉又陌生的东西? 如果你只知道CPU是中央处理器的话,那可能对你并没有什么用,那么作为程序员的我们,必须要搞懂的就是CPU这家伙是如何运行的,尤其要搞懂它里面的寄存器是怎么一回事,因为这将让你从底层明白程序的运行机制。 随我一起,来好好认识下CPU这货吧 把CPU掰开来看 对于CPU来说,我们首先就要搞明白它是怎么回事,也就是它的内部构造,当然,CPU那么牛的一个东
还记得那个提速8倍的IDEA插件吗?VS Code版本也发布啦!!
去年,阿里云发布了本地 IDE 插件 Cloud Toolkit,仅 IntelliJ IDEA 一个平台,就有 15 万以上的开发者进行了下载,体验了一键部署带来的开发便利。时隔一年的今天,阿里云正式发布了 Visual Studio Code 版本,全面覆盖前端开发者,帮助前端实现一键打包部署,让开发提速 8 倍。 VSCode 版本的插件,目前能做到什么? 安装插件之后,开发者可以立即体验...
破14亿,Python分析我国存在哪些人口危机!
2020年1月17日,国家统计局发布了2019年国民经济报告,报告中指出我国人口突破14亿。 猪哥的朋友圈被14亿人口刷屏,但是很多人并没有看到我国复杂的人口问题:老龄化、男女比例失衡、生育率下降、人口红利下降等。 今天我们就来分析一下我们国家的人口数据吧! 一、背景 1.人口突破14亿 2020年1月17日,国家统计局发布了 2019年国民经济报告 ,报告中指出:年末中国大陆总人口(包括31个
2019年除夕夜的有感而发
天气:小雨(加小雪) 温度:3摄氏度 空气:严重污染(399) 风向:北风 风力:微风 现在是除夕夜晚上十点钟,再有两个小时就要新的一年了; 首先要说的是我没患病,至少现在是没有患病;但是心情确像患了病一样沉重; 现在这个时刻应该大部分家庭都在看春晚吧,或许一家人团团圆圆的坐在一起,或许因为某些特殊原因而不能团圆;但不管是身在何处,身处什么境地,我都想对每一个人说一句:新年快乐! 不知道csdn这...
听说想当黑客的都玩过这个Monyer游戏(1~14攻略)
第零关 进入传送门开始第0关(游戏链接) 请点击链接进入第1关: 连接在左边→ ←连接在右边 看不到啊。。。。(只能看到一堆大佬做完的留名,也能看到菜鸡的我,在后面~~) 直接fn+f12吧 &lt;span&gt;连接在左边→&lt;/span&gt; &lt;a href="first.php"&gt;&lt;/a&gt; &lt;span&gt;←连接在右边&lt;/span&gt; o...
在家远程办公效率低?那你一定要收好这个「在家办公」神器!
相信大家都已经收到国务院延长春节假期的消息,接下来,在家远程办公可能将会持续一段时间。 但是问题来了。远程办公不是人在电脑前就当坐班了,相反,对于沟通效率,文件协作,以及信息安全都有着极高的要求。有着非常多的挑战,比如: 1在异地互相不见面的会议上,如何提高沟通效率? 2文件之间的来往反馈如何做到及时性?如何保证信息安全? 3如何规划安排每天工作,以及如何进行成果验收? ......
作为一个程序员,内存和磁盘的这些事情,你不得不知道啊!!!
截止目前,我已经分享了如下几篇文章: 一个程序在计算机中是如何运行的?超级干货!!! 作为一个程序员,CPU的这些硬核知识你必须会! 作为一个程序员,内存的这些硬核知识你必须懂! 这些知识可以说是我们之前都不太重视的基础知识,可能大家在上大学的时候都学习过了,但是嘞,当时由于老师讲解的没那么有趣,又加上这些知识本身就比较枯燥,所以嘞,大家当初几乎等于没学。 再说啦,学习这些,也看不出来有什么用啊!
2020年的1月,我辞掉了我的第一份工作
其实,这篇文章,我应该早点写的,毕竟现在已经2月份了。不过一些其它原因,或者是我的惰性、还有一些迷茫的念头,让自己迟迟没有试着写一点东西,记录下,或者说是总结下自己前3年的工作上的经历、学习的过程。 我自己知道的,在写自己的博客方面,我的文笔很一般,非技术类的文章不想去写;另外我又是一个还比较热衷于技术的人,而平常复杂一点的东西,如果想写文章写的清楚点,是需要足够...
别低估自己的直觉,也别高估自己的智商
所有群全部吵翻天,朋友圈全部沦陷,公众号疯狂转发。这两周没怎么发原创,只发新闻,可能有人注意到了。我不是懒,是文章写了却没发,因为大家的关注力始终在这次的疫情上面,发了也没人看。当然,我...
这个世界上人真的分三六九等,你信吗?
偶然间,在知乎上看到一个问题 一时间,勾起了我深深的回忆。 以前在厂里打过两次工,做过家教,干过辅导班,做过中介。零下几度的晚上,贴过广告,满脸、满手地长冻疮。 再回首那段岁月,虽然苦,但让我学会了坚持和忍耐。让我明白了,在这个世界上,无论环境多么的恶劣,只要心存希望,星星之火,亦可燎原。 下文是原回答,希望能对你能有所启发。 如果我说,这个世界上人真的分三六九等,...
节后首个工作日,企业们集体开晨会让钉钉挂了
By 超神经场景描述:昨天 2 月 3 日,是大部分城市号召远程工作的第一天,全国有接近 2 亿人在家开始远程办公,钉钉上也有超过 1000 万家企业活跃起来。关键词:十一出行 人脸...
Java基础知识点梳理
Java基础知识点梳理 摘要: 虽然已经在实际工作中经常与java打交道,但是一直没系统地对java这门语言进行梳理和总结,掌握的知识也比较零散。恰好利用这段时间重新认识下java,并对一些常见的语法和知识点做个总结与回顾,一方面为了加深印象,方便后面查阅,一方面为了学好java打下基础。 Java简介 java语言于1995年正式推出,最开始被命名为Oak语言,由James Gosling(詹姆
2020年全新Java学习路线图,含配套视频,学完即为中级Java程序员!!
新的一年来临,突如其来的疫情打破了平静的生活! 在家的你是否很无聊,如果无聊就来学习吧! 世上只有一种投资只赚不赔,那就是学习!!! 传智播客于2020年升级了Java学习线路图,硬核升级,免费放送! 学完你就是中级程序员,能更快一步找到工作! 一、Java基础 JavaSE基础是Java中级程序员的起点,是帮助你从小白到懂得编程的必经之路。 在Java基础板块中有6个子模块的学
B 站上有哪些很好的学习资源?
哇说起B站,在小九眼里就是宝藏般的存在,放年假宅在家时一天刷6、7个小时不在话下,更别提今年的跨年晚会,我简直是跪着看完的!! 最早大家聚在在B站是为了追番,再后来我在上面刷欧美新歌和漂亮小姐姐的舞蹈视频,最近两年我和周围的朋友们已经把B站当作学习教室了,而且学习成本还免费,真是个励志的好平台ヽ(.◕ฺˇд ˇ◕ฺ;)ノ 下面我们就来盘点一下B站上优质的学习资源: 综合类 Oeasy: 综合
相关热词 c#导入fbx c#中屏蔽键盘某个键 c#正态概率密度 c#和数据库登陆界面设计 c# 高斯消去法 c# codedom c#读取cad文件文本 c# 控制全局鼠标移动 c# temp 目录 bytes初始化 c#
立即提问

相似问题

4
Tomcat下部署两个war包项目 使用Log4j 接管 catalina.out 日志文件生成方式
12
javascpt怎么将两个数组的结果相加,得到一个新的数组呢,非要循环实现么?不用循环怎么写?
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项目,是不是必须要有域名才可以?
4
我使用idea双开了两个项目,然后报tomcat8080错误?
1
servlet 在常规的web项目里面为什么是单例,寻找源码地址
1
myeclipseCI2018.12.0新建web项目目录结构没有webroot。
2
android studio导入的module怎么实现与主程序合并为一个项目?
2
为什么两个局域网不能ping通,qq是怎么连接两个局域网的?远程控制又是怎么实现的?