# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.

This is not an official release notes document.  It exists for Shiro developers
to jot down their notes while working in the source code.  These notes will be
combined with Jira’s auto-generated release notes during a release for the
total set.

###########################################################
# 2.0.0
###########################################################

Improvement

    [SHIRO-290] Implement bcrypt and argon2 KDF algorithms

Backwards Incompatible Changes
--------------------------------

* Changed default DefaultPasswordService.java algorithm to "Argon2id".
* PasswordService.encryptPassword(Object plaintext) will now throw a NullPointerException on null parameter.
  It was never specified how this method would behave.
* Made salt non-nullable.
* Removed methods in PasswordMatcher.


###########################################################
# 1.7.1
###########################################################

Bug

    [SHIRO-797] - Shiro 1.7.0 is lower than using springboot version 2.0.7 dependency error


###########################################################
# 1.7.0
###########################################################

Bug

    [SHIRO-767] - org.apache.shiro.util.ClassUtil cannot load the array of Primitive DataType when use undertow as web container
    [SHIRO-792] - ShiroWebFilterConfiguration seems to conflict with other FilterRegistrationBean

New Feature

    [SHIRO-789] - Also add cookie SameSite option to Spring

Improvement

    [SHIRO-740] - SslFilter with HTTP Strict Transport Security (HSTS)
    [SHIRO-794] - Add system property to enable backslash path normalization
    [SHIRO-795] - Disable session path rewriting by default

Task

    [SHIRO-793] - deleteMe cookie should use the defined "sameSite"


###########################################################
# 1.6.0
###########################################################

Bug

    [SHIRO-610] - Incorrect filterchainResolver in 1.4.0-RC2
    [SHIRO-762] - SecurityUtils.securityManager should be volatile
    [SHIRO-766] - ArrayIndexOutOfBoundsException in Base64#decode

New Feature

    [SHIRO-788] - Add support for Global Filters

Wish

    [SHIRO-780] - NOTICE files of shiro components don't match NOTICE in source code repository


###########################################################
# 1.5.3
###########################################################

Bug

    [SHIRO-530] - INI parser does not properly handled backslashes at end of values
    [SHIRO-751] - SimplePrincipalMap and SimplePrincipalCollection throw different exceptions for the same problem
    [SHIRO-753] - Regression in URI parsing in Shiro 1.5.2

Dependency upgrade

    [SHIRO-754] - Upgrade to Apache Commons Codec 1.14
    [SHIRO-755] - Upgrade to Hazelcast 3.12.6
    [SHIRO-756] - Upgrade to Spring 5.2.5.RELEASE and Spring boot 2.2.6.RELEASE
    [SHIRO-757] - Upgrade to Htmlunit 2.39.0
    [SHIRO-758] - Upgrade to Jetty 9.4.27.v20200227
    [SHIRO-759] - Upgrade to Karaf 4.2.8


###########################################################
# 1.5.2
###########################################################

Bug

    [SHIRO-747] - FirstSuccessfulStrategy doesn't properly short circuit
    [SHIRO-749] - shiro-all jar is missing cache package

Improvement

    [SHIRO-748] - Update Commons Configuration to 2.7


###########################################################
# 1.5.1
###########################################################

Bug

    [SHIRO-736] - DefaultCipherInstance is an alias which is not available in every JVM or JCA Provider
    [SHIRO-739] - Bean reflection property failed with Enum values
    [SHIRO-741] - Matching of / (root) is broken
    [SHIRO-742] - fix throw exception when request uri is /

Dependency upgrade

    [SHIRO-738] - Upgrade to Spring 5.2.3.RELEASE and Spring boot 2.2.4.RELEASE


###########################################################
# 1.5.0
###########################################################

Notes: this release require a JRE 8 minimum.

Bug

    [SHIRO-458] - Possible leaked timing information from DefaultPasswordService
    [SHIRO-469] - Wrong description of JdbcRealm#setPermissionsQuery
    [SHIRO-552] - JdbcRealm in SaltStyle.COLUMN assumes that password column is Base64 but salt column is utf8 bytes
    [SHIRO-661] - Add check for the principal of subject whether is null
    [SHIRO-682] - fix the potential threat when use "uri = uri + '/' " to bypassed shiro protect
    [SHIRO-684] - INI parser keeps escape characters in keys and values
    [SHIRO-685] - Potential NullPointerException if PermissionResolver return null/empty string
    [SHIRO-687] - Additional Servlet Filters are not available to ShiroFilterFactorBean (unless using XML based beans)

New Feature

    [SHIRO-694] - Adds BearerToken support
    [SHIRO-722] - Add SameSite option to cookies

Improvement

    [SHIRO-668] - Catch unexpected errors which can lead to oom
    [SHIRO-669] - Included a boolean flag in FirstSuccessfulStrategy to break after first successful authentication
    [SHIRO-670] - ByteSource Serializable
    [SHIRO-681] - Upgrade to compiler Java 8
    [SHIRO-693] - Update plugins
    [SHIRO-700] - Minor spring updates
    [SHIRO-706] - Switch to Guice4 by default in the build
    [SHIRO-709] - Fix Shiro Spring feature
    [SHIRO-710] - Update Commons Lang3 + remove older Commons Lang
    [SHIRO-711] - Deprecate JavaEnvironment
    [SHIRO-712] - Add BasicIniEnvironment
    [SHIRO-715] - Remove old JSTL jars
    [SHIRO-720] - Update Commons BeanUtils
    [SHIRO-724] - Update Jetty, Spring, Spring Boot, Htmlunit dependencies
    [SHIRO-726] - Add dynamic import package
    [SHIRO-728] - Update Spring Boot to 2.1.10
    [SHIRO-729] - Update Quartz
    [SHIRO-730] - Updates the default Cipher mode to GCM in AesCipherService
    [SHIRO-731] - Use OWasp Java Encoder to escape user supplied content to the logs

Test

    [SHIRO-697] - Reduce shiro test logging level to INFO

Task

    [SHIRO-690] - Validate JDK11 compatibility
    [SHIRO-692] - Upgrade and enforce min build maven version to 3.5.0
    [SHIRO-698] - Improve build with maven profile
    [SHIRO-734] - Remove Spring-client sample
    [SHIRO-735] - Shiro does not support servlet-3.1 void method(@Suspended AsyncResponse)

Dependency upgrade

    [SHIRO-688] - Upgrade to commons-cli 1.4
    [SHIRO-689] - Upgrade to commons-codec 1.12
    [SHIRO-691] - Upgrade to maven-jar-plugin 3.1.1
    [SHIRO-695] - Update Hazelcast
    [SHIRO-696] - Update Jetty
    [SHIRO-699] - Fix maven warning for exec-maven-plugin and upgrade to 1.6.0
    [SHIRO-701] - Update logback
    [SHIRO-702] - Upgrade to jacoco-maven-plugin 0.8.4
    [SHIRO-703] - Update HSQL
    [SHIRO-704] - Update Spring, Spring Boot, Hibernate
    [SHIRO-705] - Update Easymock + Powermock
    [SHIRO-707] - Misc dependency updates
    [SHIRO-716] - Upgrade to commons-codec 1.13
    [SHIRO-717] - Upgrade to maven-pmd-plugin 3.12.0
    [SHIRO-718] - Upgrade to xmlsec 2.1.4
    [SHIRO-719] - Upgrade to Karaf 4.2.6

Request

    [SHIRO-723] - Provide Minor Shiro Release that includes CVE-2019-10086 Fix


###########################################################
# 1.4.2
###########################################################

Bug

    [SHIRO-721] - RememberMe Padding Oracle Vulnerability

Improvement

    [SHIRO-730] - Updates the default Cipher mode to GCM in AesCipherService


###########################################################
# 1.4.1
###########################################################

Bug

    [SHIRO-457] - Login without static VM security manager cause exception in debug
    [SHIRO-563] - shiro-aspectj karaf feature can't be installed
    [SHIRO-624] - OSGI: commons configuration import should be optional
    [SHIRO-626] - Bundle symbolic name conflict
    [SHIRO-637] - Refresh cached session in HTTP request after user logs out
    [SHIRO-650] - Shiro JAX-RS is not an OSGi bundle
    [SHIRO-653] - Spring-boot registers shiro filter only on REQUEST dispatcher
    [SHIRO-655] - shiro-core has an undesirable runtime OSGi dependency to spring-beans
    [SHIRO-658] - Problems building shiro on openjdk-8 on current debian stable (9.6 "stretch")
    [SHIRO-660] - Bug in FirstSuccessfulStrategy
    [SHIRO-680] - Duplicate Bundle-SymbolicName for Different Shiro Modules

New Feature

    [SHIRO-638] - Update osgi bundle manifest to support Spring 4.x

Improvement

    [SHIRO-560] - Shiro-web feature can't be installed in karaf 4.0.4
    [SHIRO-652] - Upgrade Shiro Feature to Karaf 4.x
    [SHIRO-664] - Upgrade to Apache pom parent 21
    [SHIRO-665] - Upgrade to maven-bundle-plugin 4.1.0
    [SHIRO-667] - Upgrade to Spring 4.3.22-RELEASE
    [SHIRO-672] - Upgrade to jacoco-maven-plugin 0.8.3
    [SHIRO-673] - Upgrade to maven-compiler-plugin 3.8.0
    [SHIRO-674] - Upgrade to maven-dependency-plugin to 3.1.1
    [SHIRO-675] - Upgrade to maven-surefire-plugins 3.0.0-M3
    [SHIRO-676] - Upgrade to maven-jar-plugin 3.1.0
    [SHIRO-677] - Upgrade to versions-maven-plugin 2.7
    [SHIRO-683] - Upgrade to spring-boot 1.5.19.RELEASE

Task

    [SHIRO-662] - Constant Name Change in AuthenticationRealm
    [SHIRO-663] - Clean up pom parent relative path

Dependency upgrade

    [SHIRO-659] - Upgrade to OWASP dependency-check-maven plugin 4.0.0


###########################################################
# 1.4.0
###########################################################

Bug

    [SHIRO-559] - shiro-guice violates the JEE specification
    [SHIRO-579] - Permission filter is validating last matched path
    [SHIRO-603] - Endless recursion in ShiroSecurityContext.getUserPrincipal()
    [SHIRO-605] - ShiroWebModule creates out of order filter chain.
    [SHIRO-607] - AuthorizationAttributeSourceAdvisor ignores type-annotations
    [SHIRO-608] - Use a ServiceLoader to discover WebEnvironments
    [SHIRO-611] - Spring web module does not load correct SessionStorageEvaluator

Improvement

    [SHIRO-596] - shiro-tools-hasher needs private salt option
    [SHIRO-618] - Spring Boot Web Starter- Autoconfiguration for Realm and ShiroFilterChainDefinition


###########################################################
# 1.4.0-RC2
###########################################################

Bug

    [SHIRO-493] - shiro-guice not working with the guice 4.x
    [SHIRO-576] - Commons-beanutils dependency is not security compliant
    [SHIRO-586] - Can't Search For Groups In Active Directory Without A System User
    [SHIRO-587] - Can't Access Groups If userPrincipalName Doesn't Exist
    [SHIRO-591] - Basic Auth Filter permissive mode does NOT work
    [SHIRO-592] - ModularRealmAuthenticator causes log spam when one realm throws exception
    [SHIRO-593] - Allow for IniWebEnvironment subclasses to specify defaults objects to ReflectionBuilder
    [SHIRO-594] - Update Hazelcast version to latest supported version (3.7.2)
    [SHIRO-595] - Allow for POST only logout requests
    [SHIRO-612] - Need to upgrade BeanUtils to avoid vulnerability

New Feature

    [SHIRO-501] - Add ability to set system properties in shiro.ini
    [SHIRO-589] - Add Servlet 3.x fragment
    [SHIRO-590] - Add Spring Boot support / starters

Improvement

    [SHIRO-296] - Typo fixes
    [SHIRO-301] - Call permissionResolver directly in AuthorizingRealm
    [SHIRO-392] - Shiro Extension for JAX-RS
    [SHIRO-599] - Fix file encoding warnings during maven build and reporting


###########################################################
# 1.3.2
###########################################################

Bug

    [SHIRO-584] - URL Path matching issue with WebUtils.getPathWithinApplication


###########################################################
# 1.3.1
###########################################################

Bug

    [SHIRO-577] - Regression - Unable to set custom SessionValidationScheduler
    [SHIRO-581] - Improve log message when remember me cipher has changed


###########################################################
# 1.3.0
###########################################################

Bug

    [SHIRO-373] - Complete CAS remember-me support
    [SHIRO-397] - SingleArgumentMethodEventListenerTest fails
    [SHIRO-421] - Unable to set long timeouts on HttpServletSession
    [SHIRO-435] - SecurityManager is not a singleton in ShiroWebModule
    [SHIRO-473] - DefaultAnnotationResolver.getAnnotation throws NullPointerException
    [SHIRO-480] - setTarget method in DomainPermission does not set targets
    [SHIRO-483] - passwordsMatch() returns false with right plain password-encrypted password in JVM with default locale tr_TR
    [SHIRO-502] - OSGi import of com.google.inject in shiro-guice has incorrect version range
    [SHIRO-513] - Misleading error message when using custom WebEnvironment
    [SHIRO-515] - ExecutorServiceSessionValidationScheduler leaks resources due to improper synchronization
    [SHIRO-547] - Use MessageDigest#isEqual() instead of Arrays#equals() for comparing digests
    [SHIRO-568] - hash iterations is calculated wrongly in SimpleHash
    [SHIRO-570] - SimpleCookie should check the path of the cookie

New Feature

    [SHIRO-200] - Add ability to configure basic authentication for specific HTTP methods
    [SHIRO-395] - Add an Event Bus for event publishing and low-coupling for custom components/plugins.
    [SHIRO-412] - Hazelcast-based caching and session clustering
    [SHIRO-436] - Add EnvironmentLoader finalizeEnvironment method

Improvement

    [SHIRO-278] - Rename JndiLdapRealm to DefaultLdapRealm
    [SHIRO-300] - WildcardPermission: change visibility of field 'parts' to protected
    [SHIRO-361] - HttpServletResponse.encodeURL: only append JSESSIONID when necessary
    [SHIRO-428] - AuthorizingRealm "no cache" logging should be at DEBUG level, not INFO, OR is should log only once
    [SHIRO-437] - WildcardPermission: conformed toString
    [SHIRO-514] - ExecutorServiceSessionValidationScheduler should create threads with a configurable name
    [SHIRO-564] - WildcardPermission case-insensitive makes parts collections twice
    [SHIRO-566] - CollectionUtils should use Collections wrappers of arrays if possible

Task

    [SHIRO-208] - Correct JDK 1.5 / 1.6 incompatibilities
    [SHIRO-320] - Add an example for using Guice integration.
    [SHIRO-571] - Mark shiro-cas deprecated (replaced with buji-pac4j)


###########################################################
# 1.2.6
###########################################################

Bug

    [SHIRO-545] - JavaEnvironment version getter
    [SHIRO-567] - shiro-root-1.2.5.pom uses invalid encoding, fails to parse with Gradle 2.14


###########################################################
# 1.2.5
###########################################################

Bug

    [SHIRO-443] - SessionValidationScheduler created multiple times, enabling it is not thread safe
    [SHIRO-462] - Authentication exceptions are swallowed
    [SHIRO-467] - Authentication exception gets swallowed
    [SHIRO-550] - Randomize default remember me cipher

Improvement

    [SHIRO-504] - Java 8 support
    [SHIRO-516] - Explicitly specify the version of aspectjtools to avoid build warning
    [SHIRO-562] - WildcardPermission calls String.trim() twice in setParts()


###########################################################
# 1.2.4
###########################################################

Bug

    [SHIRO-517] - Caused by: java.lang.NoClassDefFoundError: Lcom/google/inject/internal/util/$ImmutableList;
    [SHIRO-518] - Shiro-CAS: Security Problem in cas-client-core versions older than 3.3.2
    [SHIRO-556] - https://shiro.apache.org/realm.html appears to link to the javadoc under static/current/apidocs not static/latest

Improvement

    [SHIRO-332] - Change access level of method 'isPermitted' in org.apache.shiro.realm.AuthorizingRealm (line 461) from private to protected
    [SHIRO-496] - Update shiro.guice dependency
    [SHIRO-498] - ThreadLocal should not be created when not necessary


###########################################################
# 1.2.2
###########################################################

Bug:

    [SHIRO-316] - Annotations in samples-aspectj Project Does not Work
    [SHIRO-351] - Shiro Native Session implementation cannot extract JSESSIONID From URL if JSESSIONID is URL parameter (not HTTP parameter)
    [SHIRO-379] - SimpleAccountRealm concurrency access to roles and users
    [SHIRO-380] - runAs feature (still) doesn't work
    [SHIRO-387] - EnvironmentLoader destroys wrong environment
    [SHIRO-388] - Stackoverflow org.apache.shiro.session.SessionListener.onStop()
    [SHIRO-389] - Fix OSGI Exports for shiro-ehcache
    [SHIRO-390] - OSGi Import for JSP (javax.servlet.jsp) should be declared optional
    [SHIRO-394] - PropertiesRealm reloading not working when loading from file
    [SHIRO-399] - Memory leak for invalid sessions
    [SHIRO-403] - Trunk will not build under JDK 1.7 due to webstart plugin
    [SHIRO-413] - init() method is not called on class that implements org.apache.shiro.util.Initializable
    [SHIRO-415] - isLoginAttempt method in BasicHttpAuthenticationFilter class fails if used in any locale other than English
    [SHIRO-418] - Javadoc typo in JdbcRealm.SaltStyle
    [SHIRO-423] - INI ReflectionBuilder should not wrap reference values
    [SHIRO-429] - perms filter parsing is too sensitive to a trailing space
    [SHIRO-431] - please use git ignore
    [SHIRO-447] - Broken Javadoc links


###########################################################
# 1.2.1
###########################################################

Bug:

    [SHIRO-341] - ReflectionBuilder has invalid log message format
    [SHIRO-342] - Running the example as described at https://shiro.apache.org/10-minute-tutorial.html fails
    [SHIRO-344] - runAs feature doesn't work
    [SHIRO-350] - Creating a subject should not create a session
    [SHIRO-353] - DefaultSecurityManager has invalid SLF4J log instruction
    [SHIRO-354] - Authentication cache
    [SHIRO-358] - Source Tarball doesn't Build
    [SHIRO-363] - PasswordMatcher should support character arrays
    [SHIRO-368] - DomainPermission(string, string) constructor sets targets to the same value as actions
    [SHIRO-375] - Basic authentication issue when using COLON character
    [SHIRO-376] - shiro-cas feature should not depend on shiro-cas
    [SHIRO-377] - PropertiesRealm unable to reload Properties


###########################################################
# 1.2.0
###########################################################

Backwards Incompatible Changes
--------------------------------
- The following org.apache.shiro.mgt.DefaultSecurityManager methods have been removed:
  bindPrincipalsToSession(principals, context)

  This logic has been moved into a SubjectDAO concept to allow end-users to control
  exactly how the Session may be used for subject state persistence.  This allows a
  single point of control rather than needing to configure Shiro in multiple places.

  If you overrode this method in Shiro 1.0 or 1.1, please look at the new
  org.apache.shiro.mgt.DefaultSubjectDAO implementation, which performs compatible logic.
  Documentation for this is covered here:
  https://shiro.apache.org/session-management.html#SessionManagement-SessionsandSubjectState

- The org.apache.shiro.web.session.mgt.ServletContainerSessionManager implementation
  (enabled by default for all web applications) no longer subclasses
  org.apache.shiro.session.mgt.AbstractSessionManager.  AbstractSessionManager existed
  originally to consolidate a 'globalSessionTimeout' configuration property for
  subclasses.  However, the ServletContainerSessionManager has been changed to always
  reflect the session configuration from web.xml (per its namesake).  Because web.xml
  is the definitive source for session timeout configuration, the 'extends' clause
  was removed to avoid configuration confusion: if someone attempted to configure
  'globalSessionTimeout' on a ServletContainerSessionManager instance, it would never
  be honored.  It was better to remove the extends clause to ensure that any
  such configuration would fail fast when Shiro starts up to reflect the invalid config.


Potential Breaking Changes
--------------------------------
- The org.apache.shiro.web.filter.mgt.FilterChainManager class's
  addFilter(String name, Filter filter) semantics have changed.  It now no longer
  attempts to initialize a filter by default before adding the filter to the chain.
  If you ever called this method, you can call the
  addFilter(name, filter, true) method to achieve the <= 1.1 behavior.

- The org.apache.shiro.crypto.SecureRandomNumberGenerator previously defaulted to generating
  128 random _bytes_ each time the nextBytes() method was called.  This is too large for most purposes, so the
  default has been changed to 16 _bytes_ (which equals 128 bits - what was originally intended).  If for some reason
  you need more than 16 bytes (128 bits) of randomly generated bits, you will need to configure the
  'defaultNextByteSize' property to match your desired size (in bytes, NOT bits).

- Shiro's Block Cipher Services (AesCipherService, BlowfishCipherService) have had the following changes:

  1) The internal Cipher Mode and Streaming Cipher Mode have been changed from CFB to the new default of CBC.
     CBC is more commonly used for block ciphers today (e.g. SSL).
     If you were using an AES or Blowfish CipherService you will want to revert to the previous defaults in your config
     to ensure you can still decrypt previously encrypted data.  For example, in code:

     blockCipherService.setMode(OperationMode.CFB);
     blockCipherService.setStreamingMode(OperationMode.CFB);

     or, in shiro.ini:

     blockCipherService.modeName = CFB
     blockCipherService.streamingModeName = CFB

  2) The internal Streaming Padding Scheme has been changed from NONE to PKCS5 as PKCS5 is more commonly used.
     If you were using an AES or Blowfish CipherService for streaming operations, you will want to revert to the
     previous padding scheme default to ensure you can still decrypt previously encrypted data.  For example, in code:

     blockCipherService.setStreamingPaddingScheme(PaddingScheme.NONE);

     or, in shiro.ini:

     blockCipherService.streamingPaddingSchemeName = NoPadding

     Note the difference in code vs shiro.ini in this last example: 'NoPadding' is the correct text value, 'NONE' is
     the correct Enum value.

###########################################################
# 1.1.0
###########################################################

Backwards Incompatible Changes
--------------------------------
- The org.apache.shiro.web.util.RedirectView class's
  appendQueryProperties(StringBuffer targetUrl, Map model, String encodingScheme)
  method has been changed to accept a StringBuilder argument instead of a
  StringBuffer per SHIRO-191.  RedirectView is considered an internal
  implementation support class and Shiro end-users should not be affected by this.
