SpringBoot +Spring Security + thymeleaf + layui简单整合微信公众号
程序思路以及资源来源:
wx-java 微信工作号原demo
NatApp内网穿透
layuimini后台模版
微信工作号接口测试号获取
这个是用于本人毕业设计中绑定微信公众号推送消息的目的写的。该项目功能有:【模版消息推送】,【自动回复】,【微信用户详情】这3个功能,但是可以作为一个demo提供给大家,第一次弄公众号方面有问题请多多提出。
首先给看看具体样子:
Maven依赖
3.6.0
1.8
1.8
2.7.0
5.1.46
1.1.12
3.1.0
2.0.1
5.1.2
1.2.3
UTF-8
UTF-8
zh_CN
wechat-mp-demo
org.springframework.boot
spring-boot-starter-web
com.fasterxml.jackson.core
jackson-databind
org.springframework.boot
spring-boot-starter-thymeleaf
org.thymeleaf.extras
thymeleaf-extras-springsecurity5
org.springframework.boot
spring-boot-devtools
org.springframework.boot
spring-boot-starter-security
org.springframework.security
spring-security-test
test
com.github.binarywang
weixin-java-mp
${weixin-java-mp.version}
org.projectlombok
lombok
provided
org.springframework.boot
spring-boot-starter-test
test
redis.clients
jedis
2.9.0
org.springframework.boot
spring-boot-configuration-processor
true
com.alibaba
fastjson
1.2.46
net.sf.json-lib
json-lib
2.4
jdk15
mysql
mysql-connector-java
${mysql-connector.version}
com.alibaba
druid
${druid.version}
com.github.pagehelper
pagehelper
${pagehelper.version}
com.github.pagehelper
pagehelper-spring-boot-autoconfigure
${pagehelper-auto.version}
org.mybatis.spring.boot
mybatis-spring-boot-starter
${mybatis-starter.version}
com.baomidou
mybatis-plus-boot-starter
${mp-starter.version}
com.bscommon
bscommon-base
1.0.0-SNAPSHOT
调通WX平台接口配置
注意:认证时候写别导入Security ,因为不配做Security 的话会拦截认证请求
先登录微信平台,可以看到appid和appsecret,接口配置信息去可以设置token和配置文件一样,url为认证路径
yml配置如图下(aesKey可以不用,正式公众号才需要)
然后具体接口直接引用上方wx-demo的配置和认证接口即可,(该项目就是在该demo上进行修改的),
接口写好后运行程序,然后在微信平台上填写url和token,url为[ip]/wx/portal/[appid]
,[]为序替换的,
注意该认证端口为80或者为443,在本地测试的话可以用natApp进行内网穿透,有免费的通道可以用。
配置好点击体检,上方提示成功就Ok了。
配置Security
应为毕业原因认证方面需要自定义加密(MD5),而Security默认的BCrypt几码。还有为了解决layui 中当session过期post请求不跳转login页面,需要自定义成功/失败处理器,具体如下 如下:
/**
* 配置文件
**/
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled=true)
public class SecurityConfig extends WebSecurityConfigurerAdapter {
private static final String KEY = "yljun.com";
@Autowired
private UserDetailsService userDetailsService;
@Autowired
private LoginValidateAuthenticationProvider loginValidateAuthenticationProvider;
@Autowired
private CustomAuthenticationFailure customAuthenticationFailure; //自定义认证失败处理
@Autowired
private CustomAuthenticationSuccess customAuthenticationSuccess; //自定义认证认证处理
@Bean
public PasswordEncoder passwordEncoder() {
// return new BCryptPasswordEncoder(); // 使用 BCrypt 加密
return new CustomPasswordEncoder(); //自定义加密
}
/**
* 自定义配置 wx/** 不拦截微信平台认证
*/
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests().antMatchers("wx/**","error/**", "lib/**","js/**", "api/**", "images/**", "css/**").permitAll() // 都可以访问
.antMatchers("/h2-console/**").permitAll() // 都可以访问
.antMatchers("/wxm/**").hasRole("1") // 需要相应的角色才能访问
.antMatchers("/index", "/", "/welcome").hasRole("1")
.and()
.formLogin().failureHandler(customAuthenticationFailure).successHandler(customAuthenticationSuccess) //基于 Form 表单登录验证
.loginPage("/login") // 自定义登录界面
.and().rememberMe().key(KEY); // 启用 remember me
// .and().exceptionHandling().accessDeniedPage("/403"); // 处理异常,拒绝访问就重定向到 403 页面
http.csrf().disable(); //关闭跨域保护
http.headers().frameOptions().sameOrigin(); // 允许来自同一来源的H2 控制台的请求
}
/**
* 认证信息管理
* @param auth
* @throws Exception
*/
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userDetailsService);
auth.authenticationProvider(loginValidateAuthenticationProvider);
}
}
具体功能
完成了微信公众号消息推送以及关注用户分页获取,还有简单的公众号自动回复功能。
源码