- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 spring/hibernate/jax-rs(jersey) 进行项目。我想将 shiro 集成到我的项目中。我按照文档中的说明进行了配置。我有自己的 Realm 实现。
问:问题是当调用 authBasic 路径时,它可以与 MyRealm 一起正常工作。但是,当我调用 authc(FormAuthenticationFilter) 时,它会显示登录页面,当我输入凭据时,它会再次进入登录页面,并且不会调用 MyRealm。
我之前有过使用相同技术的项目,除了 spring(没有 spring),并且我使用了相同的 MyRealm。效果很好。
这是我的代码:web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">
<display-name>Restful Web Application</display-name>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-context.xml</param-value>
</context-param>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<!-- The filter-name matches name of a 'shiroFilter' bean inside applicationContext.xml -->
<filter>
<filter-name>shiroFilter</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
<init-param>
<param-name>targetFilterLifecycle</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>shiroFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>jersey-serlvet</servlet-name>
<servlet-class>
org.glassfish.jersey.servlet.ServletContainer
</servlet-class>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>kg.enesaitech.barbulak.ws</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>jersey-serlvet</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
</web-app>
spring-context.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">
<context:annotation-config/>
<context:component-scan base-package="kg.enesaitech.barbulak.*" />
<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
<property name="securityManager" ref="securityManager"/>
<property name="loginUrl" value="/login.html"/>
<property name="successUrl" value="/apps/warehause_manager"/>
<property name="filterChainDefinitions">
<value>
/logout = logout
/apps/admin/** = authcBasic
/apps/accountant/** = authc
/apps/production_manager/** = authc, roles[admin]
</value>
</property>
</bean>
<bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
<property name="realm" ref="myRealm"/>
</bean>
<bean id="lifecycleBeanPostProcessor" class="org.apache.shiro.spring.LifecycleBeanPostProcessor"/>
<bean id="myRealm" class="kg.enesaitech.barbulak.security.MyRealm"></bean>
<bean name="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory"/>
</bean>
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean">
<property name="persistenceUnitName" value="barbulak" />
</bean>
<bean id="mapper" class="org.dozer.DozerBeanMapper" lazy-init="false">
<property name="customFieldMapper" ref="dozerCustomFieldMapper" />
<bean id="dozerCustomFieldMapper" class="kg.enesaitech.barbulak.providers.MyCustomFieldMapper" />
<tx:annotation-driven/>
</beans>
MyRealm.java如果有帮助
package kg.enesaitech.barbulak.security;
public class MyRealm extends AuthorizingRealm {
UsersHome usersHome = new UsersHome();
RoleHome roleHome = new RoleHome();
protected boolean permissionsLookupEnabled = false;
public MyRealm() {
super();
}
@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token)
throws org.apache.shiro.authc.AuthenticationException {
UsernamePasswordToken upToken = (UsernamePasswordToken) token;
String username = upToken.getUsername();
AuthenticationInfo info = null;
Users user = usersHome.getByUserName(username);
if(user == null || user.getUserPass() == null){
throw new UnknownAccountException("No account found for user [" + username + "]");
}
info = new SimpleAuthenticationInfo(username, user.getUserPass().toCharArray(), getName());
return info;
}
@Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
if (principals == null) {
throw new AuthorizationException("PrincipalCollection method argument cannot be null.");
}
String username = (String) getAvailablePrincipal(principals);
System.out.println("Auth | username : " + username);
Set<String> roleNames = roleHome.getNameSetByUserName(username);
SimpleAuthorizationInfo info = new SimpleAuthorizationInfo(roleNames);
return info;
}
}
如有任何建议,我们将不胜感激。
注意:我尝试使用 shiro.ini 配置,但它也不起作用。角色过滤器也不会调用 MyRealm。只有 authcBasic 工作正常(调用 Realm)。
最佳答案
我的问题是添加 /login.html = authc 到 url,对于像我这样搜索这一行 3 天的人来说。
关于java - authc 过滤器未使用 spring 在 shiro 中调用 MyRealm,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30463057/
我已经一遍又一遍地讨论如何让用户登录 Shiro,但似乎仍然缺少一个重要的部分:shiro 如何根据存储的用户名和密码验证给定的用户名和密码?我想到的最多的是 It is each Realm's r
Apache Shiro 文档暗示了一些用于捕获连续失败登录尝试(以及其他)的所需功能,但是,我找不到具体的文档。目前我可以执行 currentUser.login(token);使用无效密码无限次并
我想在下一个Web项目中使用Shiro,但是我不知道一种好的(如果不是最好的)策略来管理用户(shiro.ini中的[users])。 最好为每个注册成员创建Shiro用户吗? 还是创建一个Shiro
我有一个简单的网络项目。我想在这个项目中访问多个角色是一个 URL。 网址的 sihor.ini 部分 [urls] /login.xhtml = authc /logout = logout /ad
我正在使用 apache shiro。当我想知道用户是否有权限和角色时,我使用 SecutiryUtils.getSubject()。我想知道如何向主题添加更多信息,例如电子邮件、主键和我需要的任何其
1、Shiro认证过程 1、收集实体/凭据信息 复制代码 代码如下: //Example using most common scenario of usern
我正在尝试使用 Shiro 对 Tomcat 6 中运行的 servlet 进行身份验证。 我有以下 shiro.ini 文件: [main] ps = org.apache.shiro.authc.
Apache Shiro的配置主要分为四部分: 对象和属性的定义与配置 URL的过滤器配置 静态用户配置 静态角色配置 其中,由于用户、角色一般由后台进行操作的动态数据,因此Shiro配置一般仅包
我正在使用 Spring MVC、Tiles 和 Shiro。 这是我的未授权Url 属性的配置方式: 我的期望是,当 MyAuthorizingRealm发现无效凭据,Shiro 将重定向到 /un
我正在使用 Apache Shiro 开发基于 EJB 的网络服务来管理用户访问权限。我添加了 freshly released我的 Maven 项目的 Apache Shiro 1.5.0 版使用新
我正在将现有应用程序从Grails 2.4.4升级到Grails 3.2.8。我正在尝试从grails shiro插件迁移到grails spring-security-shiro插件。除了访问已登录
我正在将我的应用程序从grails 2.4.4迁移到grails 3.2.9。 我正在尝试迁移到 compile 'org.grails.plugins:spring-security-shiro:3
在我包含 shiro-core-1.2.2 和 shiro-web-1.2.2 之前,我的 Maven Web 项目工作正常但是当我在 pom.xml 中包含此依赖项之后,我在执行时收到错误mvn t
我将 Apache Shiro 与 Spring 一起使用,并且仅使用 Spring 的 Java 配置。 (没有 XML)。下面是我的配置类的一部分: @Configuration public c
我能够使用 shiro.ini 和 spring 运行 shiro,但我想使用 shiro 注释,所以我尝试在没有 ini 文件的情况下使用 shiro-spring。但这让我很难受错误: org.a
1. 权限管理 1.1 什么是权限管理? 权限管理实现对用户访问系统的控制,按照安全规则或者安全策略,可以控制用户只能访问自己被授权的资源 权限管理包括用户身份认证和授权两部分,简称认证授权 1.2
我们经常会有用到,当A 用户在北京登录 ,然后A用户在天津再登录 ,要踢出北京登录的状态。如果用户在北京重新登录,那么又要踢出天津的用户,这样反复。 这样保证了一个帐号只能同时一个人使用。那么下面
有没有办法在 Shiro 中实现多因素身份验证?有人可以给我一个关于如何实现这一点的提示吗? 更多细节: 基本思想是,用户需要像往常一样使用用户名和密码登录,但在实际验证之前,用户还需要输入他作为 S
ini 文件就像 [main] authc.loginUrl = /login.html authc.successUrl = /index.html authc.usernameParam = j_
我了解 spring jsf 和 hibernate。我已经整合了它们并创建了我自己的框架。现在我想使用 Apache Shiro 将 session 管理添加到我的框架中。但我对 Apache Sh
我是一名优秀的程序员,十分优秀!