这个数据库的表名不是叫 users 为什么这里是 user 我改成 users 反而不对了
这是数据库名字
user登陆成功
users登陆报错
视频里的html页面不需要添加thyleaf启动器吗?还有就是,link标签添加一个头
//对密码进行加密
String password = encoder.encode("123");
System.out.println("------------"+password)
老师,encoder.encode("123");是把数据库里的密码进行解析?然后返回解析后的密码?数据库存储的实际上是加密过的密码?
还是说把数据库里的密码加密,然后再返回回来??????
跟上面同学一样的问题,输入密码后报404,代码跟老师一样。
commons-collections-3.2.2这个jar上节课什么时候,导入的,没看到呀,也没有使用
老师shiro程序是如何找到 realms的,就是从加载的ini文件里面找吗?
如果ini文件里面,没有配置JDBCRealm,那么它在加载这个文件的时候,用的默认的realm。
第二个例子中,讲述的JDBCRealm连接数据库,在shiro-jdbc.ini文件中配置了一个realm。
程序加载的是shiro-jdbc.ini
第三个例子中,讲的是认证策略,一个ini文件中,配置了多个realm。
我想问的是,程序运行时有多个realm,就是看ini文件中配置了多少个realm吗?
老师的视屏里面讲了,如果有多个数据源,每个数据对应一个realm(也就是多个ini文件),需要使用认证策略。
那么上一节课中,有一个shiro.ini文件和shiro-jdbc.ini文件,为什么不用认证策略
我照着敲的,访问时候弹出这个
package com.security.handle; import org.springframework.security.access.AccessDeniedException; import org.springframework.security.web.access.AccessDeniedHandler; import org.springframework.stereotype.Component; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; /** * @author liufupeng * @date 2021/5/11 */ @Component public class MyAccessDeniedHandler implements AccessDeniedHandler { @Override public void handle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, AccessDeniedException e) throws IOException, ServletException { httpServletResponse.setStatus(HttpServletResponse.SC_FORBIDDEN); httpServletResponse.setContentType("application/json:charset=utf-8"); PrintWriter writer = httpServletResponse.getWriter(); writer.println("{\"code\":\"403\",\"msg\":\"无权限\"}"); writer.flush(); writer.close(); } }
package com.security.config; import com.security.handle.MyAccessDeniedHandler; import com.security.handle.MyAuthenticationFailHandler; import com.security.handle.MyAuthenticationSuccessHandler; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder; /** * @author liufupeng * @date 2021/5/8 */ @Configuration public class SecurityConfig extends WebSecurityConfigurerAdapter { @Autowired private MyAccessDeniedHandler myAccessDeniedHandler; @Override protected void configure(HttpSecurity http) throws Exception { // 表单认证 http.formLogin() .loginProcessingUrl("/login") // 当发现/login时认为是登陆,需要执行UserDetailsServiceImpl // .successForwardUrl("/toMain") // 登陆成功 此处为post请求 // .failureForwardUrl("/fail") .usernameParameter("username") //自定义username字段 .passwordParameter("password") .successHandler(new MyAuthenticationSuccessHandler("/toMain")) .failureHandler(new MyAuthenticationFailHandler("/fail.html")) .loginPage("/login.html"); // url 拦截 http.authorizeRequests() .antMatchers("/login.html", "/fail.html").permitAll() // 登陆不需要被认证 // .antMatchers("/main1.html").hasAuthority("admin") .antMatchers("/main1.html").hasIpAddress("127.0.0.1") .anyRequest().authenticated(); http.csrf().disable(); http.exceptionHandling() .accessDeniedHandler(myAccessDeniedHandler); } @Bean public PasswordEncoder getPe() { return new BCryptPasswordEncoder(); } }
上网找了一下,也没有解决方法,只能求助了shiro.zip.
设置的这个是干嘛用的?。。。。。。。。。。。。。。。。。
UsernamePasswordToken token = new UsernamePasswordToken("admin","admin");
1.问题:用这个对象来写入账号密码,数据库的列名似乎只能固定是username和password?
如果想配置认证策略,而且在有多个数据源的情况下,怎么整合?
log.txt
这边连接数据库一直不成功,这个报错信息也看不懂
项目我就不发了就是老师给的样例
在UserRealm3中写
while(rs.next()){ SimpleAuthenticationInfo simpleAuthenticationInfo = new SimpleAuthenticationInfo(authenticationToken.getPrincipal(),rs.getString("pwd"),ByteSource.Util.bytes(rs.getString("salt")),"userRealm3"); return simpleAuthenticationInfo; }
运行TestC就会显示登入失败,并且报异常
把ByteSource.Util.bytes(rs.getString("salt")改为ByteSource.Util.bytes("lin")再运行TestC就登入成功
写ByteSource.Util.bytes(rs.getString("salt")出现的异常
log4j:WARN No appenders could be found for logger (org.apache.shiro.io.ResourceUtils). log4j:WARN Please initialize the log4j system properly. log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info. java.sql.SQLException: Column 'salt' not found. at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1084) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:987) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:973) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:918) at com.mysql.jdbc.ResultSetImpl.findColumn(ResultSetImpl.java:1162) at com.mysql.jdbc.ResultSetImpl.getString(ResultSetImpl.java:5728) at com.bjsxt.shiro03.UserRealm3.doGetAuthenticationInfo(UserRealm3.java:40) at org.apache.shiro.realm.AuthenticatingRealm.getAuthenticationInfo(AuthenticatingRealm.java:568) at org.apache.shiro.authc.pam.ModularRealmAuthenticator.doSingleRealmAuthentication(ModularRealmAuthenticator.java:180) at org.apache.shiro.authc.pam.ModularRealmAuthenticator.doAuthenticate(ModularRealmAuthenticator.java:267) at org.apache.shiro.authc.AbstractAuthenticator.authenticate(AbstractAuthenticator.java:198) at org.apache.shiro.mgt.AuthenticatingSecurityManager.authenticate(AuthenticatingSecurityManager.java:106) at org.apache.shiro.mgt.DefaultSecurityManager.login(DefaultSecurityManager.java:270) at org.apache.shiro.subject.support.DelegatingSubject.login(DelegatingSubject.java:256) at com.bjsxt.shiro03.TestC.main(TestC.java:25) 登入失败 Process finished with exit code 0
数据库
shiro01.rar
老师,查找出菜单里面的内容有多条,再怎么根据ResultSet遍历出来,放入下面的语句啊,不太会了
非常抱歉给您带来不好的体验!为了更深入的了解您的学习情况以及遇到的问题,您可以直接拨打投诉热线:
我们将在第一时间处理好您的问题!
关于
课程分类
百战程序员微信公众号
百战程序员微信小程序
©2014-2025百战汇智(北京)科技有限公司 All Rights Reserved 北京亦庄经济开发区科创十四街 赛蒂国际工业园网站维护:百战汇智(北京)科技有限公司 京公网安备 11011402011233号 京ICP备18060230号-3 营业执照 经营许可证:京B2-20212637