编辑
2023-07-06
database
00

远程连接mysql数据报1106连接失败

解决方法如下

telnet 远程主机的ip 所要进行访问的端口

telnet 远程主机的ip 3306

3.如果连接失败则大概率是自己的远程主机的防火墙没有开放3306端口

使用下面命令查看,端口是否对外放开`

netstat -an|grep 3306

image.png

如果显示的是 tcp 0 127.0.0.1:3306 0.0.0.0:* LISTEN

说明3306只绑定了127.0.0.1(localhost)

4.修改Mysql配置文件

vim /etc/mysql/mysql.conf.d/mysqld.cnf

输入:i进入修改操作并在bind-address =127.0.0.1前加入#注释掉

5.重启mysql

使用service重启:

service mysql restart

远程连接成功

编辑
2023-07-06
linux
00

当两台服务器之间需要传输文件时,使用FTP软件(FileZilla)就很麻烦,需要一台中转机器。

使用scp则能解决此问题,一般Linux自带scp。

scp 命令介绍

scp 本地用户名@IP地址:文件名1 远程用户名@IP地址:文件名2

[本地用户名@IP地址:] 可以不输入

复制文件

把当前文件复制到远程服务器上:

scp /home/a.txt root@192.168.0.8:/home/

然后会提示输入192.168.0.8的root密码,接着就开始复制传输了。

复制文件夹

把test文件夹复制到远程服务器home路径下

scp -r /root/home2/test root@192.168.0.8:/home/
编辑
2023-07-06
凡猫购
00

该文章已加密,点击 阅读全文 并输入密码后方可查看。

编辑
2023-07-05
中间件
00

一、前言

因为CAS支持HTTP请求访问,而我们是快速入门上手,所以这期教程就不教大家如何配置HTTPS了,如果需要使用HTTPS,可以参考其他博客去云服务器申请证书或者使用JDK自行生成一个证书。

二、准备工作

下载CAS Server(直接下载压缩包就可以) 这里我们用的是5.3版本的服务端,5.3之前的服务端都是maven项目,大于5.3的服务端就是gradle项目

下载链接

image.png

三、CAS Server服务端搭建

1.解压我们前面下载好的压缩包。

2.然后进入解压好的目录,打开cmd窗口,输入命令:bulid.cmd run

image.png

看到BUILD SUCCESS就可以关掉这个cmd窗口了。

3.接下来用我们idea打开这个解压好的目录,拉取maven依赖

因为我们5.3版本是maven项目,因此先让他去下载依赖,耐心等待依赖加载完成~

4.拉取完依赖后,创建对应java目录和resources目录

image.png

5.在resources目录中,我们把target目录下的services文件夹和application.properties文件拷贝到我们的resources目录下

image.png

6.打开HTTPSandIMAPS-10000001这个文件,在里面加上http,让他支持http请求访问

image.png

7.然后打开我们application.properties文件,把这三行注释掉,这是给配置证书情况下使用的,也就是要给配置https使用的。我们这里暂时不用

image.png

8.接下来我们需要在我们的pom.xml文件中加上支持数据库链接的依赖 因为我们不需要用他的默认账号和密码,我们要用我自己数据库中的数据登录

image.png

注意这里MySQL驱动包的版本要和自己MySQL版本对应上

<dependency> <groupId>org.apereo.cas</groupId> <artifactId>cas-server-support-jdbc</artifactId> <version>${cas.version}</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.21</version> </dependency>

9.然后我们还需要在application.properties文件中加上一些配置,具体说明看下图

image.png

#允许http cas.tgc.secure=false cas.serviceRegistry.initFromJson=true #查询账号密码sql,必须包含密码字段 cas.authn.jdbc.query[0].sql=select * from user where username = ? #指定上面的sql查询字段名(必须) cas.authn.jdbc.query[0].fieldPassword=password #指定过期字段,1为过期,若过期需要修改密码 cas.authn.jdbc.query[0].fieldExpired=expired #为不可用字段段,1为不可用, cas.authn.jdbc.query[0].fieldDisabled=disabled #数据库方言hibernate的知识 cas.authn.jdbc.query[0].dialect=org.hibernate.dialect.MySQLDialect #数据库驱动 cas.authn.jdbc.query[0].driverClass=com.mysql.jdbc.Driver #数据库连接 cas.authn.jdbc.query[0].url=jdbc:mysql://localhost:3306/db_user2?useUnicode=true&characterEncoding=UTF-8 #数据库用户名 cas.authn.jdbc.query[0].user=root #数据库密码 cas.authn.jdbc.query[0].password= #默认加密策略,通过encodingAlgorithm来指定算法,默认NONE不加密 cas.authn.jdbc.query[0].passwordEncoder.type=DEFAULT cas.authn.jdbc.query[0].passwordEncoder.characterEncoding=UTF-8 cas.authn.jdbc.query[0].passwordEncoder.encodingAlgorithm=MD5

注意下,这里我们配置文件中写了对密码进行MD5加密,因此我们数据库中存储的密码必须是MD5加密过的,不然的话登录不进去

image.png

可以这样去获取对应明文密码的MD5加密密码,然后存回数据库中的password字段中

image.png

select MD5('123456');

10.然后我们idea中配置Tomcat,就可以启动项目访问我们的服务端了

image.png

部署我们的cas服务端项目

image.png

image.png

image.png

这时候,我们就可以用我们数据库中的账号和密码进行登录了

image.png

image.png

四、CAS Client客户端搭建

1.先用我们的idea创建一个SpringBoot项目,然后在pom.xml文件中,引入对应的依赖,这边我直接贴上我客户端pom.xml里面的代码

<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" 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"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.2.5.RELEASE</version><!--2.3.3.RELEASE--> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.cpc.cd</groupId> <artifactId>cas-client</artifactId> <version>1.0-SNAPSHOT</version> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties> <dependencies> <!-- 整合web开发依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- 引入mysql连接依赖 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.6</version> <scope>runtime</scope> </dependency> <!--引入阿里巴巴druid连接池--> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.19</version> </dependency> <dependency> <groupId>net.unicon.cas</groupId> <artifactId>cas-client-autoconfig-support</artifactId> <version>2.3.0-GA</version> </dependency> </dependencies> <build> <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) --> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </pluginManagement> </build> </project>

2.然后我们要在这里加上对应配置文件代码,主要就是指明server端的地址以及当前客户端的地址

image.png

#本地cas server: port: 8090 #cas服务端配置 cas: server-url-prefix: http://localhost:8081/cas server-login-url: http://localhost:8081/cas/login #cas客户端配置 client-host-url: http://localhost:8090 #注意cas服务端的版本,如果较低这里需要使用CAS方式认证 validation-type: CAS3

3.然后在我们的启动类上要加上这个@EnableCasClient注解

image.png

4.接下来就是对CAS过滤器进行配置

首先是配置CASUtil.java文件,这个主要用来获取当前登录用户信息

package cpc.cd.util; import org.jasig.cas.client.authentication.AttributePrincipal; import org.jasig.cas.client.util.AbstractCasFilter; import org.jasig.cas.client.validation.Assertion; import javax.servlet.http.HttpServletRequest; /** * @author allentang * @create 2023-07-04 19:25 */ public class CASUtil { public static String getLoginNameFromCas(HttpServletRequest request) { Assertion assertion = (Assertion) request.getSession().getAttribute(AbstractCasFilter.CONST_CAS_ASSERTION); if(assertion!= null) { AttributePrincipal principal = assertion.getPrincipal(); return principal.getName(); } else { return null; } } }

然后是LoginUserInfoFilter.java文件的配置,这里主要配置自定义的登录用户信息拦截器

package cpc.cd.filter; import com.alibaba.druid.util.StringUtils; import cpc.cd.util.CASUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.servlet.*; import javax.servlet.http.HttpServletRequest; import java.io.IOException; /** * @author allentang * @create 2023-07-04 19:26 */ public class LoginUserInfoFilter implements Filter { Logger logger = LoggerFactory.getLogger(LoginUserInfoFilter.class); @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest request_ = (HttpServletRequest)request; String loginName = CASUtil.getLoginNameFromCas(request_); if(!StringUtils.isEmpty(loginName)){ logger.info("访问者 :" +loginName); request_.getSession().setAttribute("loginName", loginName); } chain.doFilter(request, response); } }

最后就是配置我们的CAS过滤器CASFilterConfig.java文件了

package cpc.cd.config; import cpc.cd.filter.LoginUserInfoFilter; import org.jasig.cas.client.authentication.AuthenticationFilter; import org.jasig.cas.client.session.SingleSignOutFilter; import org.jasig.cas.client.session.SingleSignOutHttpSessionListener; import org.jasig.cas.client.util.HttpServletRequestWrapperFilter; import org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter; import org.jasig.cas.client.validation.Cas30ProxyReceivingTicketValidationFilter; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.boot.web.servlet.ServletListenerRegistrationBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.Ordered; import javax.servlet.Filter; /** * @author allentang * @create 2023-07-04 19:27 */ @Configuration public class CASFilterConfig { @Value("${cas.server-url-prefix}") private String CAS_URL; @Value("${cas.client-host-url}") private String APP_URL; /** * 配置监听器 * @return */ @Bean public ServletListenerRegistrationBean servletListenerRegistrationBean(){ ServletListenerRegistrationBean listenerRegistrationBean = new ServletListenerRegistrationBean(); listenerRegistrationBean.setListener(new SingleSignOutHttpSessionListener()); listenerRegistrationBean.setOrder(Ordered.HIGHEST_PRECEDENCE); return listenerRegistrationBean; } /** * 单点登录退出 * @return */ @Bean public FilterRegistrationBean singleSignOutFilter(){ FilterRegistrationBean registrationBean = new FilterRegistrationBean(); registrationBean.setFilter(new SingleSignOutFilter()); registrationBean.addUrlPatterns("/*"); registrationBean.addInitParameter("casServerUrlPrefix", CAS_URL ); registrationBean.setName("CAS Single Sign Out Filter"); registrationBean.setOrder(2); return registrationBean; } /** * 单点登录认证 * @return */ @Bean public FilterRegistrationBean AuthenticationFilter(){ FilterRegistrationBean registrationBean = new FilterRegistrationBean(); registrationBean.setFilter(new AuthenticationFilter()); registrationBean.addUrlPatterns("/*"); registrationBean.setName("CAS Filter"); registrationBean.addInitParameter("casServerLoginUrl",CAS_URL); registrationBean.addInitParameter("serverName", APP_URL ); registrationBean.setOrder(3); return registrationBean; } /** * 单点登录校验 * @return */ @Bean public FilterRegistrationBean cas30ProxyReceivingTicketValidationFilter(){ FilterRegistrationBean registrationBean = new FilterRegistrationBean(); registrationBean.setFilter(new Cas30ProxyReceivingTicketValidationFilter()); registrationBean.addUrlPatterns("/*"); registrationBean.setName("CAS Validation Filter"); registrationBean.addInitParameter("casServerUrlPrefix", CAS_URL ); registrationBean.addInitParameter("serverName", APP_URL ); registrationBean.setOrder(4); return registrationBean; } /** * 单点登录校验 * @return */ /* @Bean public FilterRegistrationBean Cas20ProxyReceivingTicketValidationFilter(){ FilterRegistrationBean registrationBean = new FilterRegistrationBean(); registrationBean.setFilter(new Cas20ProxyReceivingTicketValidationFilter()); registrationBean.addUrlPatterns("/*"); registrationBean.setName("CAS Validation Filter"); registrationBean.addInitParameter("casServerUrlPrefix", CAS_URL ); registrationBean.addInitParameter("serverName", APP_URL ); registrationBean.setOrder(4); return registrationBean; }*/ /** * 单点登录请求包装 * @return */ @Bean public FilterRegistrationBean httpServletRequestWrapperFilter(){ FilterRegistrationBean registrationBean = new FilterRegistrationBean(); registrationBean.setFilter(new HttpServletRequestWrapperFilter()); registrationBean.addUrlPatterns("/*"); registrationBean.setName("CAS HttpServletRequest Wrapper Filter"); registrationBean.setOrder(5); return registrationBean; } /** * 获取当前登录用户信息 * @return */ @Bean public FilterRegistrationBean getLoginUserInfoFilter(){ FilterRegistrationBean registrationBean = new FilterRegistrationBean(); registrationBean.setFilter(new LoginUserInfoFilter()); registrationBean.addUrlPatterns("/*"); registrationBean.setName("loginUserInfoFilter"); registrationBean.setOrder(6); return registrationBean; } }

5.然后就是写我们的测试文件,来测试下我们单点登录和登出了

package cpc.cd.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import javax.servlet.http.HttpSession; /** * @author allentang * @create 2023-07-03 13:47 */ @Controller public class TestController { @GetMapping("/hello") @ResponseBody public String hello() { return "word"; } //登出 @RequestMapping("/logout") public String logout(HttpSession session){ session.invalidate(); return "redirect:http://localhost:8081/cas/logout"; } }

运行我们客户端的SpringBoot的项目,当我们输入 http://localhost:8090/hello 时候,它会自动跳到我们服务端的登录界面

当我们输入完账号密码登录后,再输入 http://localhost:8090/hello 时候就能正常访问内容了

当我们输入 http://localhost:8090/logout 时候,可以发现能正常退出,再输入http://localhost:8090/hello 时候需要重新登录了

编辑
2023-07-05
其他
00